Главная страница
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.48 MB
Время: 0.156 c
2-1132917097
начиннающий
2005-11-25 14:11
2005.12.11
прорисовка формы


2-1132926394
Graf
2005-11-25 16:46
2005.12.11
Перехват разрешения экрана


6-1118743677
SaX
2005-06-14 14:07
2005.12.11
Существуют ли компоненты для работы с протоколом Jabber?


2-1132825558
thvfrjd
2005-11-24 12:45
2005.12.11
Excel


1-1131979438
*Beginner*
2005-11-14 17:43
2005.12.11
Перетаскивание из TShellTreeV iew