Comment faire pour exécuter un script de base de données fichier de Delphes?
Je veux faire ce qui suit.
1) Créer une base de données.
2) l'Exécution d'un script lorsque crée des tables, procédures stockées, etc. (ce script est créé par SMS " générer des scripts en option)
J'ai trouvé le code suivant: http://www.delphipages.com/forum/showthread.php?t=181685
et modifiées à ceci:
essayer
ADOQuery.ConnectionString := 'Provider=SQLOLEDB.1;Password=' +
edtPassword.Texte
+ ';Persist Security Info=True;User ID=' + edtUser.Texte
+ ';Initial Catalog=maître;Data Source=" +
edtServerName.Texte;ADOQuery.SQL.Clear; ADOQuery.SQL.Text := 'create DataBase ' + edtWebDBName.Text; ADOQuery.ExecSQL; //should check existance of database ADOWeb.Connected := false; ADOWeb.ConnectionString := 'Provider=SQLOLEDB.1;Password=' +
edtPassword.Texte
+ ';Persist Security Info=True;User ID=' + edtUser.Texte
+ ';Initial Catalog=' + edtWebDBName.Text + ';Data Source=" +
edtServerName.Texte;
ADOWeb.Connecté := true;ADOQuery.Connection := ADOWeb; ADOQuery.SQL.Clear; ADOQuery.SQL.LoadFromFile(edtScriptFileName.Text); ADOQuery.ExecSQL; except
Cela fonctionne jusqu'au moment de l'exécution du fichier de script. Il génère ensuite une exception: Syntaxe Incorrecte près de "GO". Si je lance le script en SMS sur le nouvellement créé DB, c'est bien. Ce problème est-il dû à l'exécution de plus d'une commande SQL à la fois (le script est essentiellement une longue liste de commande/ALLER déclarations? Comment la contourner?
Oh d'ailleurs en bonus, toutes les pensées sur un coup d'oeil rapide pour voir si la nouvelle base de données existe réellement avant l'envoi d'un script pour elle? (Ou il n'est pas nécessaire, car si le fait de créer échoue, il va générer une exception?)
- Toutes ces réponses vous de travail. Je pense que pour les SMS scripts générés, l'exécution de l'utilitaire sqlcmd est le chemin à parcourir. Aussi j'ai utilisé le ci-dessous pour obtenir la db comte. ADOQuery.SQL.Text := 'SELECT COUNT(*) from sys.les bases de données OÙ nom= " +chr(39)+edtWebDBName.Texte+chr(39); ADOQuery.Ouvert; si ADOQuery.Champs[0].AsInteger = 0 alors // DB N'EXISTE PAS
Vous devez vous connecter pour publier un commentaire.
Rob le
GO
déclaration n'est pas reconnu par ADO, de sorte que vous devez supprimer de votre script avant de l'exécuter.Maintenant de vérifier si une base de données existe pas, vous pouvez exécuter une requête de ce
vérifier cet exemple très simple
assumer qui vous avez un script comme celui-ci
Maintenant pour exécuter cette phrase, vous pouvez faire quelque chose comme ceci
Que ALLER signifie la fin d'un lot que pour certains Microsoft utilitaires, ce n'est pas une bonne instruction T-SQL. Essayez de supprimer chaque occurrence de
GO
dans votre script et l'exécuter. QueGO
effectueraADOQuery.ExecSQL
pour vous à la fin de votre script.Et à votre deuxième question, vous pouvez utiliser par exemple la fonction SQL DB_ID pour vérifier si votre DB existe (vous devez être sur le même serveur, bien sûr). Cette fonction retourne l'ID de base de données; sinon NULL, donc si l'instruction SQL suivante renvoie la valeur NULL votre création de base de données a échoué.
Scripts peuvent contenir beaucoup plus de SQL DDL/DML commandes. Ils peuvent contenir des variables, des petits blocs de code, la transaction, la déclaration de la direction. Habituellement, il y a plus d'une instruction, séparés par un terminator (un point-virgule, l'Oracle slash, MSSQL GO, etc, selon la base de données que vous utilisez et sa syntaxe du script). Pour exécuter un script correctement, vous devez analyser le fichier d'entrée, séparez chaque commande, et le nourrir à la base de données correctement. Vous pouvez consulter la bibliothèque de le faire (il y en a, IIRC), ou yo pouvez essayer d'utiliser MS SQL outil de ligne de commande pour nourrir le script via la.