IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bases de données Delphi Discussion :

Erreur dans un script sql sous ADOCommand


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 116
    Points : 45
    Points
    45
    Par défaut Erreur dans un script sql sous ADOCommand
    Je place le sql suivant dans dans CommandText d'un ADOCommand

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    CREATE TABLE TCollection (
    IDCollection INTEGER NOT NULL, 
    Name VARCHAR(50) NOT NULL, 
    PRIMARY KEY(IDCollection)
    );
     
    CREATE TABLE TCollectionKeywords (
    IDCollection INTEGER NOT NULL,
    IDKeywords INTEGER NOT NULL,
    PRIMARY KEY(IDCollection, IDKeywords)
    );
    Résultat: "Erreur de syntax dans la commande CREATE TABLE"

    Si je m'arrête au premier ; soit à la fin du premier Create Table, pas de problème Une idée ?

  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Pour cette raison simple, précisée dans l'aide:
    Citation Envoyé par Aide de Delphi 7
    Vous pouvez aussi utiliser le composant TADOCommand, objet léger permettant d'exécuter une série de commandes, à raison d'une commande à la fois.
    Donc envois une à une tes commandes, ou peut-être l'utilisation d'une procédure stockée.


    @+ Claudius

  3. #3
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 116
    Points : 45
    Points
    45
    Par défaut
    Ah... je suis aveugle semble-t-il

    J'ai donc codé ceci, pas très beau mais bon...:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
    function AccessDatabaseCreator(_FileName : String) : String;
    var catalog : OLEVariant;
    begin
      result := '';
      try
        catalog := CreateOleObject('ADOX.Catalog');
        catalog.create ('Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+_Filename+';');
        catalog := NULL;
     
        DataModule6.ADOConnection2.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+_Filename+';Persist Security Info=False';
        DataModule6.ADOConnection2.Connected:=true;
        DataModule6.CreationScript.CommandText:='CREATE TABLE TCollection (IDCollection INTEGER NOT NULL, Name VARCHAR(50) NOT NULL, PRIMARY KEY(IDCollection));';
        DataModule6.CreationScript.Execute;
        DataModule6.CreationScript.CommandText:='CREATE TABLE TCollectionKeywords (IDCollection INTEGER NOT NULL,  IDKeywords INTEGER NOT NULL,  PRIMARY KEY(IDCollection, IDKeywords));';
        DataModule6.CreationScript.Execute;
        DataModule6.CreationScript.CommandText:='CREATE TABLE TCollectionPhoto ( IDCollection INTEGER NOT NULL,  IDPhoto INTEGER NOT NULL,  PRIMARY KEY(IDCollection, IDPhoto),   INDEX TCollectionTCollectionPhoto(IDCollection),  INDEX TPhotoTCollectionPhoto(IDPhoto));';
        DataModule6.CreationScript.Execute;
        DataModule6.CreationScript.CommandText:='CREATE TABLE TFormat ( IDFormat INTEGER NOT NULL,  Format VARCHAR(50) NOT NULL,  PRIMARY KEY(IDFormat), INDEX FormatFormat(Format));';
        DataModule6.CreationScript.Execute;
        DataModule6.CreationScript.CommandText:='CREATE TABLE TGPSData ( IDGpsData INTEGER NOT NULL,  Latitude VARCHAR(50) NOT NULL,  Longitude VARCHAR(50) NOT NULL,  Altitude VARCHAR(50) NOT NULL,  TimeStamp DATETIME NOT NULL,  GPSReferenceCoordonate INTEGER NOT NULL,  PRIMARY KEY(IDGpsData));';
        DataModule6.CreationScript.Execute;
        DataModule6.CreationScript.CommandText:='CREATE TABLE TKeywords (  IDKeywords INTEGER NOT NULL,  KeywordText VARCHAR(50) NOT NULL,  PRIMARY KEY(IDKeywords));';
        DataModule6.CreationScript.Execute;
        DataModule6.CreationScript.CommandText:='CREATE TABLE TMetaData (  IDMetaData INTEGER NOT NULL,  ImageWidth INTEGER NOT NULL,  ImageHeight INTEGER NOT NULL,  BitsPerComponent INTEGER NOT NULL,  ImageResolution INTEGER NOT NULL,  ShutterSpeed INTEGER NOT NULL,'+'ApertureValue INTEGER NOT NULL,  ISOSetting INTEGER NOT NULL,  MeteringMode INTEGER NOT NULL,  FlashUsed INTEGER NOT NULL,  ExposureBias INTEGER NOT NULL,  PRIMARY KEY(IDMetaData));';
        DataModule6.CreationScript.Execute;
        DataModule6.CreationScript.CommandText:='CREATE TABLE TPhoto ( IDPhoto INTEGER NOT NULL,  Thumbnail INTEGER NOT NULL,  Filename VARCHAR(50) NOT NULL,  PathToFile VARCHAR(50) NOT NULL,  Format INTEGER NOT NULL,  ImportDate DATETIME NOT NULL,'+'GPSData INTEGER NOT NULL,  Photographer INTEGER NOT NULL,  ExifData INTEGER NOT NULL,  PRIMARY KEY(IDPhoto),  INDEX FormatPhoto(Format), INDEX GPSDataPhoto(GPSData),  INDEX TMetaDataTPhoto(ExifData),  INDEX TPhotographerTPhoto(Photographer));';
        DataModule6.CreationScript.Execute;
        DataModule6.CreationScript.CommandText:='CREATE TABLE TPhotographer ( IDPhotographer INTEGER NOT NULL,  Firstname VARCHAR(50) NOT NULL,  Lastname VARCHAR(50) NOT NULL,  Nickname VARCHAR(50) NOT NULL,  Email VARCHAR(50) NOT NULL,  PRIMARY KEY(IDPhotographer));';
        DataModule6.CreationScript.Execute;
        DataModule6.CreationScript.CommandText:='CREATE TABLE TPhotoKeyword (  IDPhoto INTEGER NOT NULL,  IDKeywords INTEGER NOT NULL,  PRIMARY KEY(IDPhoto, IDKeywords),  INDEX TKeywordsTPhotoKeyword(IDKeywords),  INDEX TPhotoTPhotoKeyword(IDPhoto));';
        DataModule6.CreationScript.Execute;
     
        DataModule6.ADOConnection2.Connected:=false;
     
      except
        on e : Exception do result := e.message;
      end;
    end;
    Résultat: "Erreur de syntaxe dans la définition de champ"
    Ce sont les Index on dirait qui ne passe pas. Je dois faire ça séparément ?

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    As tu testé ces commandes directement dans Access ?

    Ps: Va falloir apprendre a utiliser les with :p

    Code Delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    function AccessDatabaseCreator(_FileName : String) : String;
    var catalog : OLEVariant;
    begin
      result := '';
      try
        catalog := CreateOleObject('ADOX.Catalog');
        catalog.create ('Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+_Filename+';');
        catalog := NULL;
     
      With Datamodule6 do
      begin
        ADOConnection2.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+_Filename+';Persist Security Info=False';
        ADOConnection2.Connected:=true;
        With CreationScript do
        begin
          CommandText:='CREATE TABLE TCollection (IDCollection INTEGER NOT NULL, Name VARCHAR(50) NOT NULL, PRIMARY KEY(IDCollection));';
          Execute;
          CommandText:='CREATE TABLE TCollectionKeywords (IDCollection INTEGER NOT NULL,  IDKeywords INTEGER NOT NULL,  PRIMARY KEY(IDCollection, IDKeywords));';
          Execute;
          CommandText:='CREATE TABLE TCollectionPhoto ( IDCollection INTEGER NOT NULL,  IDPhoto INTEGER NOT NULL,  PRIMARY KEY(IDCollection, IDPhoto),   INDEX TCollectionTCollectionPhoto(IDCollection),  INDEX TPhotoTCollectionPhoto(IDPhoto));';
          Execute;
          CommandText:='CREATE TABLE TFormat ( IDFormat INTEGER NOT NULL,  Format VARCHAR(50) NOT NULL,  PRIMARY KEY(IDFormat), INDEX FormatFormat(Format));';
          Execute;
          CommandText:='CREATE TABLE TGPSData ( IDGpsData INTEGER NOT NULL,  Latitude VARCHAR(50) NOT NULL,  Longitude VARCHAR(50) NOT NULL,  Altitude VARCHAR(50) NOT NULL,  TimeStamp DATETIME NOT NULL,  GPSReferenceCoordonate INTEGER NOT NULL,  PRIMARY KEY(IDGpsData));';
          Execute;
          CommandText:='CREATE TABLE TKeywords (  IDKeywords INTEGER NOT NULL,  KeywordText VARCHAR(50) NOT NULL,  PRIMARY KEY(IDKeywords));';
          Execute;
          CommandText:='CREATE TABLE TMetaData (  IDMetaData INTEGER NOT NULL,  ImageWidth INTEGER NOT NULL,  ImageHeight INTEGER NOT NULL,  BitsPerComponent INTEGER NOT NULL,  ImageResolution INTEGER NOT NULL,  ShutterSpeed INTEGER NOT NULL,'+'ApertureValue INTEGER NOT NULL,  ISOSetting INTEGER NOT NULL,  MeteringMode INTEGER NOT NULL,  FlashUsed INTEGER NOT NULL,  ExposureBias INTEGER NOT NULL,  PRIMARY KEY(IDMetaData));';
          Execute;
          CommandText:='CREATE TABLE TPhoto ( IDPhoto INTEGER NOT NULL,  Thumbnail INTEGER NOT NULL,  Filename VARCHAR(50) NOT NULL,  PathToFile VARCHAR(50) NOT NULL,  Format INTEGER NOT NULL,  ImportDate DATETIME NOT NULL,'+'GPSData INTEGER NOT NULL,  Photographer INTEGER NOT NULL,  ExifData INTEGER NOT NULL,  PRIMARY KEY(IDPhoto),  INDEX FormatPhoto(Format), INDEX GPSDataPhoto(GPSData),  INDEX TMetaDataTPhoto(ExifData),  INDEX TPhotographerTPhoto(Photographer));';
          Execute;
          CommandText:='CREATE TABLE TPhotographer ( IDPhotographer INTEGER NOT NULL,  Firstname VARCHAR(50) NOT NULL,  Lastname VARCHAR(50) NOT NULL,  Nickname VARCHAR(50) NOT NULL,  Email VARCHAR(50) NOT NULL,  PRIMARY KEY(IDPhotographer));';
          Execute;
          CommandText:='CREATE TABLE TPhotoKeyword (  IDPhoto INTEGER NOT NULL,  IDKeywords INTEGER NOT NULL,  PRIMARY KEY(IDPhoto, IDKeywords),  INDEX TKeywordsTPhotoKeyword(IDKeywords),  INDEX TPhotoTPhotoKeyword(IDPhoto));';
          Execute;
        end; // With
        ADOConnection2.Connected:=false;
      end; // with
      except
        on e : Exception do result := e.message;
      end;
    end;

  5. #5
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 116
    Points : 45
    Points
    45
    Par défaut
    Tu as raison ça ne marche pas

    apparemment il faut le faire dans une autre command sous la forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CREATE INDEX IdxCollection on TCollectionPhoto (IDCollection);
    Grrr encore plein de commandes à rajouter

    Pour les WITH, oui je me suis dit que je devrais régler ça mais comme jene suis pas à l'aise du tout avec le DB et pas trop trop à l'aise avec Delphi, je voulais être certain de ce que je tapais. Mais c'est vrai qu'à la longue c'est plus clair et plus lisible.

    Merci

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    A tester, au lieu d'utiliser un TAdoCommand, utilises un TAdoQuery. je pense que cela focntionnera mieux et je pense que le multi command fonctionnera.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    With TAdoQuery.create(self) do
    try
      Connection := AdoConnection2;
      SQL.Add(' CREATE TABLE TCollection (IDCollection INTEGER NOT NULL, Name VARCHAR(50) NOT NULL, PRIMARY KEY(IDCollection));';
      SQL.Add('CREATE TABLE TCollectionKeywords (IDCollection INTEGER NOT NULL,  IDKeywords INTEGER NOT NULL,  PRIMARY KEY(IDCollection, IDKeywords));';
    // ...
      SQL.Add('CREATE TABLE TCollectionPhoto ( IDCollection INTEGER NOT NULL,  IDPhoto INTEGER NOT NULL,  PRIMARY KEY(IDCollection, IDPhoto),   INDEX TCollectionTCollectionPhoto(IDCollection),  INDEX TPhotoTCollectionPhoto(IDPhoto));';
      ExecSQL;
    finally
      free;
    end;
    Avec bien sur, les corrections dans tes requetes (bien penser à mettre le ; à la fin de chaque requete).

  7. #7
    Membre du Club
    Inscrit en
    Octobre 2005
    Messages
    116
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 116
    Points : 45
    Points
    45
    Par défaut
    Merci je vais essayer ça..

Discussions similaires

  1. Message d'erreur dans un script sql
    Par nabilG dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/03/2009, 18h19
  2. [Sql] erreur dans un script
    Par fyren` dans le forum Oracle
    Réponses: 9
    Dernier message: 03/02/2006, 00h44
  3. erreur dans mon script
    Par Swata dans le forum Langage
    Réponses: 4
    Dernier message: 21/09/2005, 01h02
  4. [langage]erreur dans mon script
    Par Fabouney dans le forum Langage
    Réponses: 11
    Dernier message: 30/06/2005, 15h58
  5. [Apache] Erreur dans mes scripts CGI
    Par GLDavid dans le forum Apache
    Réponses: 2
    Dernier message: 28/08/2004, 07h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo