mssqlconn/pl
│
English (en) │
español (es) │
français (fr) │
polski (pl) │
Bibliografia:
Poradniki/porady praktyczne:
Bazy danych |
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-gnu
- sudo ln -s libsybdb.so.5.1.0 libsybdb.so
- Ubuntu 20.04
- 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
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;