Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.11;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.045 c
2-1133043077
Дмитрий Ка
2005-11-27 01:11
2005.12.11
Как изменить знак перемнной?


14-1132393898
x.pro
2005-11-19 12:51
2005.12.11
Что означает LOL?


2-1132918799
kay
2005-11-25 14:39
2005.12.11
Есть non-unicode программа, как её запустить с правильным отображ


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


14-1132655028
Dmitrij_K
2005-11-22 13:23
2005.12.11
SFTP





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский