Подключение к MS SQL из Linux (Ubuntu)

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

Подключение к MS SQL из Linux (Ubuntu)

Сообщение STAKANOV » 17.03.2013 17:43:12

По работе состряпал скрипт на PHP запрос к БД на MS SQL и вывод на страничку.
Стало интересно подобное на FPC сделать. Оказалось все очень просто, но может кому пригодится.
Код: Выделить всё
program hello;
{$mode objfpc}{$H+}
uses
mssqlconn, sqldb;
var
  mssql:TMSSQLConnection;
  trans:TSQLTransaction;
  query:TSQLQuery;
begin
writeln('Content-Type: text/html',#10#13);
writeln('<html><body>');

writeln('hello<br>');


mssql:=TMSSQLConnection.Create(nil);
mssql.HostName:='192.168.0.7:1433';
mssql.DatabaseName:='тут имя БД';
mssql.UserName:='тут имя пользователя';
mssql.Password:='тут пароль;

trans:=TSQLTransaction.Create(nil);
trans.Database:=mssql;

query:=TSQLQuery.Create(nil);
query.Database:=mssql;
query.Transaction:=trans;

mssql.Connected:=true;
if mssql.Connected then
  writeln('connected')
else
  writeln('not connected');
writeln('<br>');

query.SQL.Text:='SELECT TOP 10 Awb_prefix FROM doc_Cargo';
query.Open;
while not query.EoF do
  begin
   writeln(query.FieldByName('Awb_prefix').AsString);
   writeln('<br>');
   query.Next;
  end;
writeln('</body></html>');
query.free;
trans.free;
mssql.free;
end.


Ubuntu 12.10 (amd64)
fpc 2.6.2 (скачан с сайта и установлен вручную, в репозитарии 2.6.0 - там поддержа MS SQL еще не реализована, по-моему)

в начале нелинковалось, не хватало libdl, чтобы понять где библиотека начал ставить apt-files, так оно и libdl доставило
так же необходимо установить пакет freetds-dev
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Re: Подключение к MS SQL из Linux (Ubuntu)

Сообщение STAKANOV » 21.03.2013 15:50:00

Решил попробовать сделать тоже самое, но более коротким путем. Получилось вот что:
Код: Выделить всё
program mssqltest;
{$MODE ObjFPC}{$H+}
uses
dblib;

function DBErrHandler(dbproc: PDBPROCESS; severity, dberr, oserr:INT; dberrstr, oserrstr:PChar):INT; cdecl;
begin
  writeln('DB-Lib error ',dberr,': ',dberrstr);
  Result    :=INT_CANCEL;
end;

function DBMsgHandler(dbproc: PDBPROCESS; msgno: DBINT; msgstate, severity:INT; msgtext, srvname, procname:PChar; line:DBUSMALLINT):INT; cdecl;
begin
  writeln('SQL Server Message ',msgno,': ',msgtext);
  Result  :=0;
end;

var
dbproc:PDBPROCESS;
login:PLOGINREC;
begin
InitialiseDBLib;

dbinit();
dberrhandle(@DBErrHandler);
dbmsghandle(@DBMsgHandler);

login:=dblogin();
if login=nil then writeln('dblogin() failed!');

dbsetlversion(login, DBVER60);
dbsetlname(login, PChar('тут имя пользователя'), DBSETUSER);
dbsetlname(login, PChar('тут пароль'), DBSETPWD);
//dbsetlcharset(login, 'cp866');
dbsetlogintime(10);

dbproc:=dbopen(login, PChar('192.168.0.7:1433'));
if dbproc=nil then writeln('dbopen() failed!');
dbuse(dbproc,'тут имя БД');

dbcmd(dbproc,'SELECT TOP 10 Awb_prefix FROM doc_Cargo');
dbsqlexec(dbproc);
if dbresults(dbproc)=SUCCEED then
  while dbnextrow(dbproc)<>NO_MORE_ROWS do
   begin
    writeln(PChar(dbdata(dbproc,1)));
   end;
dbclose(dbproc);
dbfreelogin(login);

ReleaseDBLib;
end.


второй бинарник в 3 раза меньше
работает как в Windows так и в Linux(Ubuntu)

из того что подмечено в процессе - в dblib.pp не реализована функция dbbind(), хотя в самом FreeTDS она вроде есть
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград

Re: Подключение к MS SQL из Linux (Ubuntu)

Сообщение STAKANOV » 26.03.2013 20:33:56

Код: Выделить всё
PChar(dbdata(dbproc,1))

не совсем корректно, стоит еще проверять реальный размер с помощью dbdatlen()

еще маленький старый твик - скопировал исходник dblib.pp в папку со своими скриптами и собирал все использованием ключей -CX -XX - теперь бинарник совсем маленький, думаю, что для cgi это имеет значение :-)
Аватара пользователя
STAKANOV
энтузиаст
 
Сообщения: 1069
Зарегистрирован: 14.05.2006 21:26:24
Откуда: Зеленоград


Вернуться в Базы данных

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

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

Рейтинг@Mail.ru