Object Pascal 的自由軟體實作 Free Pascal 可以使用 SQLdb 套件存取 RDBMS(支援的資料庫包含 Oracle, MSSQL, MySQL, PostgreSQL, Firebird, SQLite 等, 以及通用的介面 ODBC) 。
下面連線到 PostgreSQL 取得版本資訊的程式:
{$ifdef FPC} {$mode delphi} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}
program MyProgram;
uses
SysUtils, SQLdb, PQConnection;
var
Conn: TSQLConnection;
Transaction1: TSQLTransaction;
Query1: TSQLQuery;
begin
Conn := TPQConnection.Create(nil);
try
try
Conn.DatabaseName := 'danilo';
Conn.HostName := 'localhost';
Conn.UserName := 'danilo';
Conn.Password := 'danilo';
Conn.Params.Add('port=5432');
// Open the connection
Conn.Connected := True;
Transaction1 := TSQLTransaction.Create(nil);
Transaction1.DataBase := Conn;
Query1 := TSQLQuery.Create(nil);
Query1.DataBase := Conn;
Query1.Transaction := Transaction1;
// Example query execution
Transaction1.StartTransaction;
Query1.SQL.Text := 'SELECT version() as version';
Query1.Open;
while not Query1.EOF do
begin
WriteLn(Query1.FieldByName('version').AsString);
Query1.Next;
end;
Query1.Close;
Transaction1.Commit;
Conn.Connected := False;
except
on E: Exception do
writeln('An error occurred: ', E.Message);
end;
finally
// Clean up resources
if Assigned(Query1) then Query1.Free;
if Assigned(Transaction1) then Transaction1.Free;
if Assigned(Conn) then Conn.Free;
end;
end.
我在編譯時遇到 "crtbegin.o" not found 的問題, 這是 /etc/fpc.cfg 設定的 C runtime library 的路徑找不到檔案(通常是因為 GCC 版本更新)。 解決方法是搜尋 crtbegin.o 的路徑,然後更新 /etc/fpc.cfg 的設定。
#ifdef cpux86_64
-Fl/usr/lib64/gcc/x86_64-suse-linux/15
#endif
下面是使用 ODBC 連線到 PostgreSQL 取得版本資訊的程式:
{$ifdef FPC} {$mode delphi} {$endif}
{$ifdef MSWINDOWS} {$apptype CONSOLE} {$endif}
program MyProgram;
uses
SysUtils, SQLdb, ODBCConn;
var
Conn: TSQLConnection;
Transaction1: TSQLTransaction;
Query1: TSQLQuery;
begin
Conn := TODBCConnection.Create(nil);
try
try
Conn.Params.Add('DSN=PostgreSQL');
Conn.Params.Add('UID=danilo');
Conn.Params.Add('PWD=danilo');
// Open the connection
Conn.Connected := True;
Transaction1 := TSQLTransaction.Create(nil);
Transaction1.DataBase := Conn;
Query1 := TSQLQuery.Create(nil);
Query1.DataBase := Conn;
Query1.Transaction := Transaction1;
// Example query execution
Transaction1.StartTransaction;
Query1.SQL.Text := 'SELECT version() as version';
Query1.Open;
while not Query1.EOF do
begin
WriteLn(Query1.FieldByName('version').AsString);
Query1.Next;
end;
Query1.Close;
Transaction1.Commit;
Conn.Connected := False;
except
on E: Exception do
writeln('An error occurred: ', E.Message);
end;
finally
// Clean up resources
if Assigned(Query1) then Query1.Free;
if Assigned(Transaction1) then Transaction1.Free;
if Assigned(Conn) then Conn.Free;
end;
end.
沒有留言:
張貼留言
注意:只有此網誌的成員可以留言。