ODBС. Не открывается курсор SQLQuery при подключении к MSSQL

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

ODBС. Не открывается курсор SQLQuery при подключении к MSSQL

Сообщение alexmai » 21.05.2009 18:55:09

Что за чудеса, работаю в lazarus 0.9.27
Подключаюсь к MSSQL через ODBC
procedure TForm1.Button1Click(Sender: TObject);
begin
ODBCConnection1.Connected:=true;
SQLQuery1.SQL.Add( 'select top 10 * from loans');
SQLQuery1.ExecSQL ;
//??????????????
SQLQuery1.Open ; - вылетает по ошибке "не допустмое состояние курсора"
end;

Причем как с родными дровами на винде так и с freetds в Линуксе одна и таже песня
ODBCConnection1.Charset устанавливал разные UTF8,cp1251,WIN32,WIN1251 эффект равен нулю.

Сделал правку свойства
FTransliterate := True; в конструкторе constructor
TStringField.Create(AOwner: TComponent);
пересобрал Lazarus - ничего не помогает
Хотя через zeos в винде подключаюсь с тем же профилем dsn все ОК, а вот в Линуске zeos просит dll-ку ntwdblib.dll
Короче как в песне " я его и так и этак со словами и без слов.."
Выходит возможность работы с MSSQL тупо выпадает
alexmai
постоялец
 
Сообщения: 106
Зарегистрирован: 02.02.2009 14:58:42

Re: ODBС. Не открывается курсор SQLQuery при подключении к MSSQL

Сообщение alexs » 21.05.2009 19:22:45

У меня вобще очень большие сомнения в функциональности TODBCConnection. Сам сегодня мучил. Надо допиливать.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: ODBС. Не открывается курсор SQLQuery при подключении к MSSQL

Сообщение Mr.Smart » 21.05.2009 19:39:53

Компонента практически нерабочая.
Пользуйтесь чистым ODBC API...
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: ODBС. Не открывается курсор SQLQuery при подключении к MSSQL

Сообщение alexs » 22.05.2009 00:23:02

а что есть рабочее для доступа к MS SQL?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: ODBС. Не открывается курсор SQLQuery при подключении к MSSQL

Сообщение Mr.Smart » 22.05.2009 00:34:25

alexs писал(а):а что есть рабочее для доступа к MS SQL?

Пока не написал свои классы для работы с ODBC через API пользовался ZeosDB.
ZeosDB использует так называемы DB Lib интерфейс (ntwdblib.dll) который хоть и поддерживается MS SQL 2005(2008), но с сервером не поставляется так что скора будет удалён...
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: ODBС. Не открывается курсор SQLQuery при подключении к MSSQL

Сообщение alexs » 22.05.2009 01:17:11

просто через ОДБЦ не хочется заморачиваться. и так прокладок между БД и мордой программы куча. Хочется чуть уменьшить это число.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: ODBС. Не открывается курсор SQLQuery при подключении к MSSQL

Сообщение alexmai » 22.05.2009 08:43:47

alexs писал(а):просто через ОДБЦ не хочется заморачиваться. и так прокладок между БД и мордой программы куча. Хочется чуть уменьшить это число.

А когда можно будет попробовать результаты ДОПИЛИВАНИЯ ?
Что касается винды, то в ней мало интересна проблема подключения к MSSQL, а вот учитывая факт самой привлекательности lazarus, как opensource
под Линукс кроме freetds + unixodbc для MSSQL альтернативы НЕТ. Мне кажется, что проще сделать компоненту именно для freetds или unixodbc,
QT- шники так и сделали.
Сейчас заказчик очень ревностно относится к проблеме лицензионности софта, и какая- нибудь левая платная примочка может обгадить весь проект.
Меня удивляет "левая реклама " zeos, продекларировали поодержку кучи баз под линкс, а тут на ровном месте такое грубое обращение к виндовой dll.
alexmai
постоялец
 
Сообщения: 106
Зарегистрирован: 02.02.2009 14:58:42

Re: ODBС. Не открывается курсор SQLQuery при подключении к MSSQL

Сообщение Mr.Smart » 22.05.2009 10:06:27

alexmai писал(а):Меня удивляет "левая реклама " zeos, продекларировали поодержку кучи баз под линкс, а тут на ровном месте такое грубое обращение к виндовой dll.

Под линукс нет анологичной библиотеки так как это разработка МелкомМягких и входит в поставку MS SQL до версии 2005!

Отличие ODBC Виндового от линуксового заключается лишь в соглашениях вызова функций. В винде оно stdcall, а линуксе соответственно cdecl

Код: Выделить всё
{$IFDEF Unix}
  const
    odbclib = 'libodbc.so';
{$ENDIF}
{$IFDEF Windows}
  const
    odbclib = 'odbc32.dll';
{$ENDIF} 
....
function SQLMoreResults(StatementHandle: SQLHANDLE): SQLRETURN;{$IFDEF Unix}cdecl{$ELSE}stdcall{$ENDIF};
         external odbclib name 'SQLMoreResults'; 


Ещё есть один момент. В модуле odbcsql из стандартной поставки FPC присутствуют не все функции.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: ODBС. Не открывается курсор SQLQuery при подключении к MSSQL

Сообщение alexmai » 22.05.2009 16:01:55

Ура!
Проблему победил в Linux все работает , а винда мне и не надо!
Чтобы подключиться к MSSQL
1.Подключаюсь через установленные unixodbc и freetds
2.Установливаю свойства
SQLQuery1.ParseSQL:= false;
SQLQuery1.UsePrimaryKeyAsKey :=false;
так как MSSQL не поддерживает этого
alexmai
постоялец
 
Сообщения: 106
Зарегистрирован: 02.02.2009 14:58:42

Re: ODBС. Не открывается курсор SQLQuery при подключении к MSSQL

Сообщение alexmai » 11.06.2009 09:38:56

Кроме выше уазанного пришлось пропатчить 4 патчем и перекомпилить файлы odbcconn.pas и sqldb.pp,
без них при повторном выполнении скрипта вылетает по ошибке, не правильно распознает возвращаемые коды ошибок после выполнения запроса.
alexmai
постоялец
 
Сообщения: 106
Зарегистрирован: 02.02.2009 14:58:42


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23

Рейтинг@Mail.ru