Difference between revisions of "mssqlconn/fr"

From Lazarus wiki
Jump to navigationJump to search
m (Fixed syntax highlighting)
 
(2 intermediate revisions by one other user not shown)
Line 7: Line 7:
  
 
==DBLib==
 
==DBLib==
 +
 
mssqlconn utilise l'unité de bas-niveau dblib qui nécessite la bibliothèque [http://www.freetds.org FreeTDS] (.dll/.dylib/.so) pour se connecter au serveur.
 
mssqlconn utilise l'unité de bas-niveau dblib qui nécessite la bibliothèque [http://www.freetds.org FreeTDS] (.dll/.dylib/.so) pour se connecter au serveur.
  
 
==Installation==
 
==Installation==
 +
 
La seule chose dont vous avez besoin est une bibliothèque dll/dylib/so FreeTDS pour votre plate-forme.
 
La seule chose dont vous avez besoin est une bibliothèque dll/dylib/so FreeTDS pour votre plate-forme.
 
* Sur Linux, téléchargez le paquet freetds qui fournit '''libsybdb.so''' (p.ex. dans la Debian, cela est fourni par le paquet '''libsybdb5''') et le paquet de développement associé en utilisant votre gestionnaire de paquet. vous aurez aussi besoin d'ajouter un lien symbolique libsybdb.so vers libsybdb.so.5.
 
* Sur Linux, téléchargez le paquet freetds qui fournit '''libsybdb.so''' (p.ex. dans la Debian, cela est fourni par le paquet '''libsybdb5''') et le paquet de développement associé en utilisant votre gestionnaire de paquet. vous aurez aussi besoin d'ajouter un lien symbolique libsybdb.so vers libsybdb.so.5.
Line 17: Line 19:
  
 
==Documentation==
 
==Documentation==
 +
 
Documentation officielle : [http://www.freepascal.org/docs-html/fcl/mssqlconn/index.html Documentation FPC sur mssqlconn]
 
Documentation officielle : [http://www.freepascal.org/docs-html/fcl/mssqlconn/index.html Documentation FPC sur mssqlconn]
  
 
==Limitations et conseils==
 
==Limitations et conseils==
 +
 
* Port Sybase : le port par défaut pour Sybase ASE est le 5000. Comme FreeTDS/mssqlconn utilise 1433 par défaut, vous pouvez vouloir ajouter :5000 à la propriété hostname automatiquement ou après le retour d'information de l'utilisateur final.
 
* Port Sybase : le port par défaut pour Sybase ASE est le 5000. Comme FreeTDS/mssqlconn utilise 1433 par défaut, vous pouvez vouloir ajouter :5000 à la propriété hostname automatiquement ou après le retour d'information de l'utilisateur final.
  
Line 27: Line 31:
  
 
===Paramètres de sorties et procédures stockées===
 
===Paramètres de sorties et procédures stockées===
 +
 
Aussi, '''TMSSQLConnection''' et '''TSybaseConnection''' ne prennent pas en charge la gestion des status de retour et les paramètres de sortie (''output parameters'') des procédures stockées. Pour plus d'information, voir : http://www.freetds.org/faq.html#ms.output.parameters.
 
Aussi, '''TMSSQLConnection''' et '''TSybaseConnection''' ne prennent pas en charge la gestion des status de retour et les paramètres de sortie (''output parameters'') des procédures stockées. Pour plus d'information, voir : http://www.freetds.org/faq.html#ms.output.parameters.
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
with SQLQuery1 do begin
 
with SQLQuery1 do begin
 
   SQL.Text:='declare @param int; declare @ret int;'+
 
   SQL.Text:='declare @param int; declare @ret int;'+
Line 39: Line 44:
  
 
Quelques conseils de plus :
 
Quelques conseils de plus :
 +
 
* Vous pourriez vouloir faire un YourConnection.ExecuteDirect('SET ANSI_NULL_DFLT_ON ON'); si vous voulez permettre les valeurs NULL pour les colonnes à la création des tables. Voir la documentation : http://msdn.microsoft.com/en-us/library/ms174979.aspx.
 
* Vous pourriez vouloir faire un YourConnection.ExecuteDirect('SET ANSI_NULL_DFLT_ON ON'); si vous voulez permettre les valeurs NULL pour les colonnes à la création des tables. Voir la documentation : http://msdn.microsoft.com/en-us/library/ms174979.aspx.
 
* Vous pourriez vouloir de manière similaire définir SET ANSI_PADDING à ON pour activre ne meilleure compatibilité avec les fonctions de comparaison de texte de SQLdb. Voir la documentation MS : http://msdn.microsoft.com/en-us/library/ms187403.aspx.
 
* Vous pourriez vouloir de manière similaire définir SET ANSI_PADDING à ON pour activre ne meilleure compatibilité avec les fonctions de comparaison de texte de SQLdb. Voir la documentation MS : http://msdn.microsoft.com/en-us/library/ms187403.aspx.
  
 
==Messages d'erreur==
 
==Messages d'erreur==
 +
 
===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===
 +
 
* Vérifier si le protocole TCP/IP est activé sur le serveur SQL en utilisant "SQL Server Configuration Manager" - "SQL Server Network Configuration".
 
* Vérifier si le protocole TCP/IP est activé sur le serveur SQL en utilisant "SQL Server Configuration Manager" - "SQL Server Network Configuration".
 
* Vérifier si le port TCP 1433 est ouvert.
 
* Vérifier si le port TCP 1433 est ouvert.
Line 53: Line 61:
  
 
===Erreur 20047 : DBPROCESS is dead or not enabled===
 
===Erreur 20047 : DBPROCESS is dead or not enabled===
* SQL Server periodically verifies (by default every 30 seconds) if idle TCP/IP connection is still intact by sending a keep alive packet to its peer. If the remote system is still reachable and functioning, a acknowledge packet is sent back. If not local TCP will reset connection.
+
* SQL Server vérifie périodiquement (toutes les 30 secondes par défaut) si la connection TCP/IP idle est toujours intact en envoyant un paquet 'keep alive' à ses paires. Si le système distant est toujours joignable et en cours de fonctionnement, un paquet d'accusé de réception est envoyé en retour. Sinon, le TCP local réinitialisera la connexion.
* Adjust SQL Server Configuration Manager -> SQL Server Network Configuration -> Protocols -> TCP/IP : "Keep Alive"
+
* Ajuster SQL Server Configuration Manager -> 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===
*Make sure you have all required dlls installed (e.g. '''dblib.dll''', '''libiconv2.dll''')
+
 
*Make sure you have all required C/C++ runtime libraries installed that '''dblib.dll''' depends on
+
* Assurez-vous que toutes les dll nécessaires sont installées (p.ex. '''dblib.dll''', '''libiconv2.dll''')
*Make sure the bitness (32 or 64 bit) of the dblib library and your compiled program match
+
* Assurez-vous que tout le bibliothèque d'exécution (''runtime libraries'') C/C++ dont dépend '''dblib.dll''' sont installées.
 +
* Assurez-vous que la taille d'adressage (''bitness'', 32 ou 64 bit) de la bibliothèque dblib et celle de votre programme concordent.
  
 
==Exemples==
 
==Exemples==
 +
 
===Création d'une base de données===
 
===Création d'une base de données===
 +
 
L'exemple ci-dessous crée une base de données dans un serveur MS SQL. Pour cela, le paramètre de connection AutoCommit doit être mis à 'On'. Pour les connexion normale suivantes, vous pouvez le basculer à 'Off' à nouveau et utiliser les '''StartTransaction''' et '''Commit''' normales.
 
L'exemple ci-dessous crée une base de données dans un serveur MS SQL. Pour cela, le paramètre de connection AutoCommit doit être mis à 'On'. Pour les connexion normale suivantes, vous pouvez le basculer à 'Off' à nouveau et utiliser les '''StartTransaction''' et '''Commit''' normales.
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
// Set up a form with a button called DBButton,  
 
// Set up a form with a button called DBButton,  
 
// textbox called DatabaseNameEdit,
 
// textbox called DatabaseNameEdit,
Line 96: Line 107:
 
end;
 
end;
 
</syntaxhighlight>
 
</syntaxhighlight>
<br/>
 

Latest revision as of 01:17, 21 February 2020

English (en) español (es) français (fr) polski (pl)

Portail de la base de données

Références:

Tutoriels/articles pratiques :

Bases de données

Advantage - MySQL - MSSQL - Postgres - Interbase - Firebird - Oracle - ODBC - Paradox - SQLite - dBASE - MS Access - Zeos

mssqlconn est un unité de fcl-db contenant le code du connecteur pour TMSSQLConnection (MS SQL Server) et TSybaseConnection (Sybase ASE).

Lazarus utilise mssqlconn pour présenter un connecteur MS SQL et un connecteur Sybase ASE.

DBLib

mssqlconn utilise l'unité de bas-niveau dblib qui nécessite la bibliothèque FreeTDS (.dll/.dylib/.so) pour se connecter au serveur.

Installation

La seule chose dont vous avez besoin est une bibliothèque dll/dylib/so FreeTDS pour votre plate-forme.

  • Sur Linux, téléchargez le paquet freetds qui fournit libsybdb.so (p.ex. dans la Debian, cela est fourni par le paquet libsybdb5) et le paquet de développement associé en utilisant votre gestionnaire de paquet. vous aurez aussi besoin d'ajouter un lien symbolique libsybdb.so vers libsybdb.so.5.
  • Sur Windows, vous pouvez télécharger une version 32 ou 64 bits récente de la bibliothèque FreeTDS dblib.dll ici : [1]

Utilisation avancée : en modifiant le fichier FPC dblib.pas SQLDB pourrait utiliser la bibliothèque "native" ntwdblib.dll au lieu de la bibliothèque FreeTDS par défaut dblib.dll (dans ce cas, FPC a besoin d'être recompilé).

Documentation

Documentation officielle : Documentation FPC sur mssqlconn

Limitations et conseils

  • Port Sybase : le port par défaut pour Sybase ASE est le 5000. Comme FreeTDS/mssqlconn utilise 1433 par défaut, vous pouvez vouloir ajouter :5000 à la propriété hostname automatiquement ou après le retour d'information de l'utilisateur final.

Comme la documentation le spécifie :

  • vous pouvez avoir besoin affiner certains paramètres pour la prise en charge des BLOB.
  • les ensembles résultats multiple de MS SQL (multiple resultsets,MARS) ne sont pas pris en charge.

Paramètres de sorties et procédures stockées

Aussi, TMSSQLConnection et TSybaseConnection ne prennent pas en charge la gestion des status de retour et les paramètres de sortie (output parameters) des procédures stockées. Pour plus d'information, voir : http://www.freetds.org/faq.html#ms.output.parameters.

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;

Quelques conseils de plus :

Messages d'erreur

Error 20009 : Unable to connect: Adaptive Server is unavailable or does not exist

  • Vérifier si le protocole TCP/IP est activé sur le serveur SQL en utilisant "SQL Server Configuration Manager" - "SQL Server Network Configuration".
  • Vérifier si le port TCP 1433 est ouvert.
  • Si vous vous connecter à une instance spécifique de SQL Server (ce qui est aussi le cas de SQL Server Express), vérifier si le SQL Server Browser Service est en cours d'exécution sur le serveur (le service écoute sur le port UDP 1434).

Erreur 20019 : Attempt to initiate a new Adaptive Server operation with results pending

Erreur 20047 : DBPROCESS is dead or not enabled

  • SQL Server vérifie périodiquement (toutes les 30 secondes par défaut) si la connection TCP/IP idle est toujours intact en envoyant un paquet 'keep alive' à ses paires. Si le système distant est toujours joignable et en cours de fonctionnement, un paquet d'accusé de réception est envoyé en retour. Sinon, le TCP local réinitialisera la connexion.
  • Ajuster SQL Server Configuration Manager -> SQL Server Network Configuration -> Protocols -> TCP/IP : "Keep Alive".

EINOutError/Can not load DB-Lib client library "dblib.dll". Check your installation

  • Assurez-vous que toutes les dll nécessaires sont installées (p.ex. dblib.dll, libiconv2.dll)
  • Assurez-vous que tout le bibliothèque d'exécution (runtime libraries) C/C++ dont dépend dblib.dll sont installées.
  • Assurez-vous que la taille d'adressage (bitness, 32 ou 64 bit) de la bibliothèque dblib et celle de votre programme concordent.

Exemples

Création d'une base de données

L'exemple ci-dessous crée une base de données dans un serveur MS SQL. Pour cela, le paramètre de connection AutoCommit doit être mis à 'On'. Pour les connexion normale suivantes, vous pouvez le basculer à 'Off' à nouveau et utiliser les StartTransaction et Commit normales.

// Set up a form with a button called DBButton, 
// textbox called DatabaseNameEdit,
// '''MSSQLConnection''' called FConn
// ***make sure the Autocommit parameter is on for the create db part before connectiong:
//FConn.Params.Add('AutoCommit=true');
procedure TForm1.CreateDBButtonClick(Sender: TObject);
var
  CurrentDB: string;
begin
  if DatabaseNameEdit.Text='' then
  begin
    showmessage('Empty database name. Please specify database name first.');
    exit;
  end;

  CurrentDB:=FConn.DatabaseName;
  try
    // For FPC 2.6.1+
    FConn.ExecuteDirect('CREATE DATABASE '+DatabaseNameEdit.Text);
    {
    // This works with FPC 2.7.1, not on 2.6.1
    FConn.CreateDB;
    }
  except
    on E: Exception do
    begin
      showmessage('Exception running CreateDB: '+E.Message);
    end;
  end;
end;