Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Вниз

Connect к MySQL через dbExpress->ODBC   Найти похожие ветки 

 
Juice ©   (2005-10-27 10:44) [0]

Вопрос может и не по базам данных вообще. Кто-то работал с dbExpress через ODBC ? Я скачал драйвер OpenODBC for dbExpress и все ОК - демка, что с ним в комплекте нормально  работает. Но из своего приложения при попытке коннекта я получаю :
Project raised exception class EDbxOdbcWarning with messsage "SQL_SUCCESS_WITH_INFO returned from ODBC function SQLGetINfo(SQL_IDENTIFIER_QUOTE_CHAR) ODBC Return Code:1: SQL_SUCCESS_WITH_INFO  No ODBC diagnostic info avalable." Prosess stoped. Use Step or Run to continue.
После этой ошибки я продолжаю работать, открываю датасет, получаю данные. Я скопировал TSQLConnection из демки и кинул на свою форму, перенес и проверил все настройки проекта и директивы компилятора - все один в один сходится с той демкой. Вот куски кода коннекта:
Мой код:

try
   SQLConnection2.Connected := true;
 finally
   if SQLConnection2.Connected then ShowMessage("yo"); //показывается!
 end;
 SimpleDataSet1.Open;

А вот из демки:

procedure TFormOdbcExplor.pbConnectClick(Sender: TObject);
var
 sConString, sVendorLib, sVendorDesc: String;
 Status: SQLResult;
 Len : Smallint;
 {begin: exception stack demo}
 //  O: TObject;
 {end.}
begin
 {begin: exception stack demo}
 {
   O := Self;
  if O <> nil then
    O := nil;
  ShowMessage( O.ClassName() );
 //}
 {end.}
 Cursor := crSQLWait;
 try
 try
   TickCountInfo := GetTickCount;

   //SQLConnection1.Connected := not (SQLConnection1.Connected);
   if SQLConnection1.Connected then
     SQLConnection1.Connected := False
   else
   try
     if cbDefConOpt.Checked then
       SQLConnection1.Params.Clear;
     try
       SQLConnection1.Connected := True;
     finally
       // remove cached connection options cConnectionOptionsNames[coInternalCloneConnection]:
       sConString := dfDSN.Text;
       sVendorLib := GetOptionValue(sConString, cConnectionOptionsNames[coInternalCloneConnection],
         {HideOption=}True, {TrimResult=}True, {bOneChar=}False,
         {HideTemplate=}#0);
       if sVendorLib <> #0 then
         dfDSN.Text := sConString;
     end;
   except
     on e:Exception do
     begin
       if pos(DbxOpenOdbcInterface.rsNotSpecifiedDNSName, E.Message) > 0 then
         exit
       else
         raise;
     end;
   end;

   repeat

   TickCountInfo := GetTickCount - TickCountInfo;
   SB.Panels[0].Text := Format(cTickCountInfo, [TickCountInfo]);

   if SQLConnection1.Connected then
   begin
     pbConnect.Caption := "Disc&onnect";
     // goto query page
     TabSet1.TabIndex := 1;
     // save last connection string to second position (after "?")
     sConString := Trim(dfDSN.Text);
     sConString := GetOptionValue(sConString, "DSN");
     if (dfDSN.Text="?") or (sConString="") or (sConString="?") then
     begin
       Len := 0;
       Status := SQLConnection1.SQLConnection.getOption(TSQLConnectionOption(xeConnConnectionName),
         nil, 0, Len);
       if (Status <> 0) or (Len <= 0) then
         break;
       SetLength(sConString, Len);
       Status := SQLConnection1.SQLConnection.getOption(TSQLConnectionOption(xeConnConnectionName),
         PChar(sConString), Len, Len);
       if Len > 0 then
         SetLength(sConString, Len);
       if (Status <> 0) or (Len <= 0) then
         break;
     end
     else
     begin
       sConString := dfDSN.Text;
     end;

     sVendorLib := GetOptionValue(sConString, "VENDORLIB",
       {HideOption=}False, {TrimResult=}True, {bOneChar=}False,
       {HideTemplate=}#0);
     if sVendorLib = #0 then
     begin
       sVendorDesc := VendorLib.Text;
       sVendorLib := GetOptionValue(sVendorDesc, "VENDORLIB",
         {HideOption=}False, {TrimResult=}True, {bOneChar=}False,
         {HideTemplate=}#0);
       if (sVendorLib <> #0) and (CompareText(sVendorLib, "odbc32.dll") <> 0) then
       begin
         if Pos("=", sConString) > 1 then
           sConString := "VendorLib="+sVendorLib + ";" + sConString
         else
           sConString := "VendorLib="+sVendorLib + ";DSN=" + sConString
       end;
     end;
     if sVendorLib <> #0 then
     begin
       sVendorLib := ExtractVendorLibName(sVendorLib);
       sVendorDesc := ";VENDORLIB="+UpperCase(sVendorLib);
       for Len := 0 to VendorLib.Items.Count-1 do
       begin
         if Pos(sVendorDesc, UpperCase(VendorLib.Items[Len])) > 0 then
         begin
           sVendorDesc := #0;
           VendorLib.ItemIndex := Len;
           Break;
         end;
       end;
       if sVendorDesc <> #0 then
       begin
         sVendorDesc := "VendorName=?" + sVendorLib +";VendorLib="+sVendorLib;
         VendorLib.Items.Add(sVendorDesc);
         VendorLib.ItemIndex := VendorLib.Items.Count-1;
       end;
     end;

     Len := dfDSN.Items.IndexOf(sConString);
     if (Len>1)or(Len<0) then
     begin
       if Len>0 then
         dfDSN.Items.Delete(Len);
       dfDSN.Items.Insert(1, sConString);
     end;
     dfDSN.Text := sConString;
   end
   else
     pbConnect.Caption := "C&onnect";

   until True; // break

 except
   if not SQLConnection1.Connected then
     SQLConnection1AfterDisconnect(SQLConnection1)
   else
    SQLConnection1AfterConnect(SQLConnection1);
   raise;
 end;
 finally
   Cursor := crDefault;
 end;
end;

Как так, что даже под IDE в демке никаких исключений не возникает вообще ? Что может на это повлиять, кроме как сам код и набор свойств SQLConnection1 во время коннекта ? А я их сверял, даже прямо перед коннектом в runtime скидывал состояние компонента в файл а потом сверял со своим - все сходится:

object SQLConnection1: TSQLConnection
 ConnectionName = "OpenOdbc:Prompt"
 DriverName = "OpenOdbc"
 GetDriverFunc = "getSQLDriverODBC"
 LibraryName = "D:\Temp\OpenODBC_3_019_at_2004-08-13\Demos\DbExplor\dbxoodbc.dll"
 LoginPrompt = False
 Params.Strings = (
   "Database=DSN=MYODBCDBMySQL")
 VendorLib = "myodbc3.dll"
 Left = 64
 Top = 464
end


 
Juice ©   (2005-10-27 14:17) [1]

Вопрос снят. Демка в uses подключалась к исходникам библиотеки dbxoodbc а я понятное дело ее напрямую использовал. Перекомпилировал библиотеку и все ОК.



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.04 c
4-1129004207
Zert
2005-10-11 08:16
2005.12.11
например в чужое окно можно записать значение, а как прочесть из


14-1132441218
тень отца Гамлета
2005-11-20 02:00
2005.12.11
Чемпион по AV


14-1132600503
Eraser
2005-11-21 22:15
2005.12.11
Лазерный диск по-английски


11-1113410359
hotes
2005-04-13 20:39
2005.12.11
Динамическое меню


11-1113156574
Dimaxx
2005-04-10 22:09
2005.12.11
Рисование на канве mdwXLGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский