Difference between revisions of "mssqlconn/pl"
(→Limitations and tips: tłumaczenie na j. polski) |
m (Zmiana szablonu na pl) |
||
(5 intermediate revisions by the same user not shown) | |||
Line 2: | Line 2: | ||
<div style="font-size:1.88em;margin:0.75em 0;">Moduł MSSQLConn</div> | <div style="font-size:1.88em;margin:0.75em 0;">Moduł MSSQLConn</div> | ||
− | {{Infobox databases}} | + | {{Infobox databases/pl}} |
'''MSSQLConn''' to moduł fcl-db zawierający kod konektora dla [[TMSSQLConnection]] (MS SQL Server) i [[TSybaseConnection]] (Sybase ASE). | '''MSSQLConn''' to moduł fcl-db zawierający kod konektora dla [[TMSSQLConnection]] (MS SQL Server) i [[TSybaseConnection]] (Sybase ASE). | ||
Line 57: | Line 57: | ||
* 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 | * 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=== | ===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 | * 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=== | ===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=== | ===Error 20047 : DBPROCESS is dead or not enabled=== | ||
− | + | DBPROCESS jest martwy lub nie jest włączony | |
− | * SQL Server | + | * 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=== | ===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'''. | |
<syntaxhighlight lang=pascal> | <syntaxhighlight lang=pascal> | ||
− | // | + | // Skonfiguruj formularz z przyciskiem o nazwie DBButton, |
− | // | + | // pole tekstowe o nazwie DatabaseNameEdit, |
− | // '''MSSQLConnection''' | + | // '''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'); | //FConn.Params.Add('AutoCommit=true'); | ||
procedure TForm1.CreateDBButtonClick(Sender: TObject); | procedure TForm1.CreateDBButtonClick(Sender: TObject); | ||
Line 99: | Line 100: | ||
if DatabaseNameEdit.Text = '' then | if DatabaseNameEdit.Text = '' then | ||
begin | begin | ||
− | showmessage(' | + | showmessage('Pusta nazwa bazy danych. Podaj najpierw nazwę bazy danych.'); |
exit; | exit; | ||
end; | end; | ||
Line 105: | Line 106: | ||
CurrentDB := FConn.DatabaseName; | CurrentDB := FConn.DatabaseName; | ||
try | try | ||
− | // | + | // Dla FPC 2.6.1+ |
FConn.ExecuteDirect('CREATE DATABASE ' + DatabaseNameEdit.Text); | FConn.ExecuteDirect('CREATE DATABASE ' + DatabaseNameEdit.Text); | ||
{ | { | ||
− | // | + | // To działa z FPC 2.7.1, ale nie z 2.6.1 |
FConn.CreateDB; | FConn.CreateDB; | ||
} | } | ||
Line 114: | Line 115: | ||
on E: Exception do | on E: Exception do | ||
begin | begin | ||
− | showmessage(' | + | showmessage('Uruchamianie CreateDB wywołało wyjątek: ' + E.Message); |
end; | end; | ||
end; | end; | ||
end; | end; | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 00:35, 13 November 2021
│
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;