mssqlconn/pl: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: mssqlconn/pl
| Old | New | Line | |
|---|---|---|---|
| 1 | + | Moduł MSSQLConn | |
| 2 | + | ||
| 3 | + | **MSSQLConn** to moduł fcl-db zawierający kod konektora dla [[TMSSQLConnection]] (MS SQL Server) i [[TSybaseConnection]] (Sybase ASE). | |
| 4 | + | ||
| 5 | + | Lazarus używa MSSQLConn do prezentowania konektora MS SQL i konektora Sybase ASE. | |
| 6 | + | ||
| 7 | + | ## DBLib | |
| 8 | + | ||
| 9 | + | MSSQLConn używa modułu niskiego poziomu dblib, który wymaga biblioteki [FreeTDS](http://www.freetds.org) (.dll/.dylib/.so) do połączenia z serwerem. | |
| 10 | + | ||
| 11 | + | ## Instalacja | |
| 12 | + | ||
| 13 | + | Jedyne, czego potrzebujesz, to biblioteka FreeTDS dll/dylib/so dla twojej platformy. | |
| 14 | + | ||
| 15 | + | - 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 | |
| 16 | + | - Ubuntu 20.04 | |
| 17 | + | ||
| 18 | + | `sudo apt install libsybdb5` | |
| 19 | + | ||
| 20 | + | `cd /usr/lib/x86_64-linux-gnu` | |
| 21 | + | ||
| 22 | + | `sudo ln -s libsybdb.so.5.1.0 libsybdb.so` | |
| 23 | + | - 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/> | |
| 24 | + | ||
| 25 | + | 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). | |
| 26 | + | ||
| 27 | + | ## Dokumentacja | |
| 28 | + | ||
| 29 | + | Oficjalna dokumentacja: [FPC MSSQLConn](http://www.freepascal.org/docs-html/fcl/mssqlconn/index.html) | |
| 30 | + | ||
| 31 | + | ## Ograniczenia i wskazówki | |
| 32 | + | ||
| 33 | + | - 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. | |
| 34 | + | ||
| 35 | + | Jak określa dokumentacja: | |
| 36 | + | ||
| 37 | + | - może być konieczne dostosowanie niektórych parametrów obsługi BLOB. | |
| 38 | + | - MS SQL Wielokrotne zestawienia wyników MS SQL (MARS) nie są obsługiwane. | |
| 39 | + | ||
| 40 | + | Zmiana nazwy sterownika i/lub pozycji | |
| 41 | + | ||
| 42 | + | - Umieść dblib jako pierwszy moduł w swoim .lpr, a następnie wywołaj dblib.initialisedblib('/ścieżka/do/libsybdb.so') | |
| 43 | + | ||
| 44 | + | ### Parametry wyjściowe procedur składowanych | |
| 45 | + | ||
| 46 | + | 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: | |
| 47 | + | ||
| 48 | + | ``` pascal | |
| 49 | + | with SQLQuery1 do begin | |
| 50 | + | SQL.Text := 'declare @param int; declare @ret int;' + | |
| 51 | + | 'exec @ret=MyStoredProc 1, @param OUTPUT;' + | |
| 52 | + | 'select @ret as return_status, @param as out_param'; | |
| 53 | + | Open; | |
| 54 | + | end; | |
| 55 | + | ``` | |
| 56 | + | ||
| 57 | + | Kilka dodatkowych wskazówek: | |
| 58 | + | ||
| 59 | + | - 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> | |
| 60 | + | - 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> | |
| 61 | + | ||
| 62 | + | ## Komunikaty błędów | |
| 63 | + | ||
| 64 | + | ### Error 20009 : Unable to connect: Adaptive Server is unavailable or does not exist | |
| 65 | + | ||
| 66 | + | Nie można nawiązać połączenia: Adaptive Server jest niedostępny lub nie istnieje | |
| 67 | + | ||
| 68 | + | - Sprawdź, czy protokół TCP/IP jest włączony po stronie SQL Server, używając „SQL Server Configuration Manager” - „SQL Server Network Configuration” | |
| 69 | + | - Check if TCP port 1433 is opened | |
| 70 | + | - Sprawdź, czy port TCP 1433 jest otwarty | |
| 71 | + | - 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) | |
| 72 | + | ||
| 73 | + | ### Error 20019 : Attempt to initiate a new Adaptive Server operation with results pending | |
| 74 | + | ||
| 75 | + | Próba zainicjowania nowej operacji Adaptive Server z oczekującymi wynikami | |
| 76 | + | ||
| 77 | + | - Ustaw właściwość TSQLQuery.PacketRecords na -1 | |
| 78 | + | - Aby uzyskać więcej informacji zobacz: <http://www.freetds.org/faq.html#pending> | |
| 79 | + | ||
| 80 | + | ### Error 20047 : DBPROCESS is dead or not enabled | |
| 81 | + | ||
| 82 | + | DBPROCESS jest martwy lub nie jest włączony | |
| 83 | + | ||
| 84 | + | - 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. | |
| 85 | + | - Dostosuj Menedżera konfiguracji programu SQL Server -\> SQL Server Network Configuration -\> Protocols -\> TCP/IP : "Keep Alive" | |
| 86 | + | ||
| 87 | + | ### EINOutError/Can not load DB-Lib client library "dblib.dll". Check your installation | |
| 88 | + | ||
| 89 | + | Nie można załadować biblioteki klienta DB-Lib „dblib.dll”. Sprawdź swoją instalację | |
| 90 | + | ||
| 91 | + | - Upewnij się, że masz zainstalowane wszystkie wymagane biblioteki dll (np. **dblib.dll**, **libiconv2.dll**) | |
| 92 | + | - Upewnij się, że masz zainstalowane wszystkie wymagane biblioteki wykonawcze C/C++, od których zależy **dblib.dll** | |
| 93 | + | - Upewnij się, jaka jest bitowość (32 lub 64 bity) biblioteki dblib i skompilowanego programu oraz czy są zgodne | |
| 94 | + | ||
| 95 | + | ## Przykłady | |
| 96 | + | ||
| 97 | + | ### Tworzenie bazy danych | |
| 98 | + | ||
| 99 | + | 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**. | |
| 100 | + | ||
| 101 | + | ``` pascal | |
| 102 | + | // Skonfiguruj formularz z przyciskiem o nazwie DBButton, | |
| 103 | + | // pole tekstowe o nazwie DatabaseNameEdit, | |
| 104 | + | // '''MSSQLConnection''' o nazwie FConn | |
| 105 | + | // ***upewnij się, że parametr Autocommit jest włączony dla tworzonej części bazy danych przed połączeniem: | |
| 106 | + | //FConn.Params.Add('AutoCommit=true'); | |
| 107 | + | procedure TForm1.CreateDBButtonClick(Sender: TObject); | |
| 108 | + | var | |
| 109 | + | CurrentDB: string; | |
| 110 | + | begin | |
| 111 | + | if DatabaseNameEdit.Text = '' then | |
| 112 | + | begin | |
| 113 | + | showmessage('Pusta nazwa bazy danych. Podaj najpierw nazwę bazy danych.'); | |
| 114 | + | exit; | |
| 115 | + | end; | |
| 116 | + | ||
| 117 | + | CurrentDB := FConn.DatabaseName; | |
| 118 | + | try | |
| 119 | + | // Dla FPC 2.6.1+ | |
| 120 | + | FConn.ExecuteDirect('CREATE DATABASE ' + DatabaseNameEdit.Text); | |
| 121 | + | { | |
| 122 | + | // To działa z FPC 2.7.1, ale nie z 2.6.1 | |
| 123 | + | FConn.CreateDB; | |
| 124 | + | } | |
| 125 | + | except | |
| 126 | + | on E: Exception do | |
| 127 | + | begin | |
| 128 | + | showmessage('Uruchamianie CreateDB wywołało wyjątek: ' + E.Message); | |
| 129 | + | end; | |
| 130 | + | end; | |
| 131 | + | end; | |
| 132 | + | ``` | |
| 133 | + | ||
| 134 | + | --- | |
| 135 | + | *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](/wiki-contact).* |
