Текущий архив: 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.06 c