mssqlconn/pl
English · Español · Français · Polski
Moduł MSSQLConn
MSSQLConn to moduł fcl-db zawierający kod konektora dla TMSSQLConnection (MS SQL Server) i TSybaseConnection (Sybase ASE).
Lazarus używa MSSQLConn do prezentowania konektora MS SQL i konektora Sybase ASE.
DBLib
MSSQLConn używa modułu niskiego poziomu dblib, który wymaga biblioteki FreeTDS (.dll/.dylib/.so) do połączenia z serwerem.
Instalacja
Jedyne, czego potrzebujesz, to biblioteka FreeTDS dll/dylib/so dla twojej platformy.
-
W systemie Linux pobierz pakiet freetds, który zawiera libsybdb.so (np. w Debianie/Raspbian jest to dostarczane przez pakiet libsybdb5) i powiązany jest z pakietem programistycznym za pomocą menedżera pakietów. Może być również konieczne dodanie dowiązania symbolicznego libsybdb.so do libsybdb.so.5
-
Ubuntu 20.04
sudo apt install libsybdb5
cd /usr/lib/x86_64-linux-gnusudo ln -s libsybdb.so.5.1.0 libsybdb.so -
-
W systemie Windows możesz pobrać najnowszą 32 lub 64-bitową wersję biblioteki FreeTDS dblib.dll tutaj: ftp://ftp.freepascal.org/fpc/contrib/windows/ lub http://downloads.freepascal.org/fpc/contrib/windows/
Zaawansowane użycie: przez modyfikację pliku FPC dblib.pas, SQLDB może używać „natywnej” biblioteki ntwdblib.dll zamiast domyślnej biblioteki FreeTDS dblib.dll (w tym przypadku FPC musi zostać przekompilowane).
Dokumentacja
Oficjalna dokumentacja: FPC MSSQLConn
Ograniczenia i wskazówki
- Port Sybase: domyślny port TCP dla Sybase ASE to 5000. Ponieważ FreeTDS/mssqlconn domyślnie używa 1433, warto dodać :5000 do właściwości nazwy hosta automatycznie lub po otrzymaniu informacji zwrotnej od użytkownika końcowego.
Jak określa dokumentacja:
- może być konieczne dostosowanie niektórych parametrów obsługi BLOB.
- MS SQL Wielokrotne zestawienia wyników MS SQL (MARS) nie są obsługiwane.
Zmiana nazwy sterownika i/lub pozycji
- Umieść dblib jako pierwszy moduł w swoim .lpr, a następnie wywołaj dblib.initialisedblib('/ścieżka/do/libsybdb.so')
Parametry wyjściowe procedur składowanych
Ponadto TMSSQLConnection i TSybaseConnection nie wspierają obsługi statusu zwrotu i parametrów wyjściowych procedur składowanych. Więcej informacji na stronie: http://www.freetds.org/faq.html#ms.output.parameters Jako obejście możesz użyć czegoś takiego:
with SQLQuery1 do begin
SQL.Text := 'declare @param int; declare @ret int;' +
'exec @ret=MyStoredProc 1, @param OUTPUT;' +
'select @ret as return_status, @param as out_param';
Open;
end;Kilka dodatkowych wskazówek:
- Możesz chcieć zrobić YourConnection.ExecuteDirect('SET ANSI_NULL_DFLT_ON ON'); jeśli chcesz automatycznie zezwalać na wartości NULL dla kolumn podczas tworzenia tabel. Zobacz dokumentację MS: http://msdn.microsoft.com/en-us/library/ms174979.aspx
- Możesz podobnie ustawić SET ANSI_PADDING to ON, aby umożliwić lepszą zgodność z funkcjami porównywania tekstu sqldb. Zobacz dokumentację MS: http://msdn.microsoft.com/en-us/library/ms174979.aspx
Komunikaty błędów
Error 20009 : Unable to connect: Adaptive Server is unavailable or does not exist
Nie można nawiązać połączenia: Adaptive Server jest niedostępny lub nie istnieje
- Sprawdź, czy protokół TCP/IP jest włączony po stronie SQL Server, używając „SQL Server Configuration Manager” - „SQL Server Network Configuration”
- Check if TCP port 1433 is opened
- Sprawdź, czy port TCP 1433 jest otwarty
- Jeśli łączysz się z konkretną instancją SQL Server (tak jest również w przypadku SQL Server Express), sprawdź, czy usługa przeglądarki SQL Server jest uruchomiona na serwerze (usługa nasłuchuje na porcie UDP 1434)
Error 20019 : Attempt to initiate a new Adaptive Server operation with results pending
Próba zainicjowania nowej operacji Adaptive Server z oczekującymi wynikami
- Ustaw właściwość TSQLQuery.PacketRecords na -1
- Aby uzyskać więcej informacji zobacz: http://www.freetds.org/faq.html#pending
Error 20047 : DBPROCESS is dead or not enabled
DBPROCESS jest martwy lub nie jest włączony
- SQL Server okresowo weryfikuje (domyślnie co 30 sekund), czy bezczynne połączenie TCP/IP jest nadal nienaruszone, wysyłając pakiet utrzymania aktywności do swojego partnera. Jeśli system zdalny jest nadal dostępny i działa, pakiet potwierdzający jest wysyłany z powrotem. Jeśli nie, lokalny TCP zresetuje połączenie.
- Dostosuj Menedżera konfiguracji programu SQL Server -> SQL Server Network Configuration -> Protocols -> TCP/IP : "Keep Alive"
EINOutError/Can not load DB-Lib client library "dblib.dll". Check your installation
Nie można załadować biblioteki klienta DB-Lib „dblib.dll”. Sprawdź swoją instalację
- Upewnij się, że masz zainstalowane wszystkie wymagane biblioteki dll (np. dblib.dll, libiconv2.dll)
- Upewnij się, że masz zainstalowane wszystkie wymagane biblioteki wykonawcze C/C++, od których zależy dblib.dll
- Upewnij się, jaka jest bitowość (32 lub 64 bity) biblioteki dblib i skompilowanego programu oraz czy są zgodne
Przykłady
Tworzenie bazy danych
Poniższy przykład tworzy bazę danych na serwerze MS SQL Server. Aby to zadziałało, parametr połączenia AutoCommit musi być włączony. W przypadku kolejnego zwykłego połączenia możesz je ponownie wyłączyć i użyć zwykłych metod StartTransaction i Commit.
// Skonfiguruj formularz z przyciskiem o nazwie DBButton,
// pole tekstowe o nazwie DatabaseNameEdit,
// '''MSSQLConnection''' o nazwie FConn
// ***upewnij się, że parametr Autocommit jest włączony dla tworzonej części bazy danych przed połączeniem:
//FConn.Params.Add('AutoCommit=true');
procedure TForm1.CreateDBButtonClick(Sender: TObject);
var
CurrentDB: string;
begin
if DatabaseNameEdit.Text = '' then
begin
showmessage('Pusta nazwa bazy danych. Podaj najpierw nazwę bazy danych.');
exit;
end;
CurrentDB := FConn.DatabaseName;
try
// Dla FPC 2.6.1+
FConn.ExecuteDirect('CREATE DATABASE ' + DatabaseNameEdit.Text);
{
// To działa z FPC 2.7.1, ale nie z 2.6.1
FConn.CreateDB;
}
except
on E: Exception do
begin
showmessage('Uruchamianie CreateDB wywołało wyjątek: ' + E.Message);
end;
end;
end;From the Free Pascal wiki, page "mssqlconn/pl", as it stood on 2021-11-12 after a change by Slawek, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.
Talk about this page
Nobody has opened a bench for this page yet. Sign in to open one.
