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

Firebird Discussion :

API C++ Firebird Requête CREATE TABLE.


Sujet :

Firebird

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut API C++ Firebird Requête CREATE TABLE.
    J'utilise l'Embedded, j'ai interfacé la DLL ( j'utilise GCC sur windows donc pas de .a pour ma pomme ). J'utilise aussi wxwidget.

    La création de la BD fonctionne mais je but à la création d'une table. Avant de la créer je vérifie si la table n'existe pas. Du moins c'est ce que j'espère réussir à faire faire.

    L'erreur qu'il me sort : Invalid token -104
    cela se produit exactement lors de l'appel de isc_dsql_execute_immediate
    D'ailleurs la requête peut être simplement wxT(" CREATE TABLE " ) + aNameDoubleCote, il en ressort la même erreur.

    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
     
    bool GR_Firebird::CreateTable( wxString aNameTable, bool Commit )
    {
     
        if( m_baseAttache )
        {
            wxString aNameDoubleCote = wxT('"') + aNameTable + wxT('"')  ;
     
            wxString createTable = wxT( "IF NOT EXISTS ( SELECT name FROM sysobjects WHERE type='U' AND name = ") ;
            createTable += aNameDoubleCote + wxT(" ) ") ;
            createTable += wxT(" CREATE TABLE " ) +  aNameDoubleCote ;
     
            bool result = !GR_isc_start_transaction( m_status, &m_trans, 1, &m_db, 0, NULL ) ;
                 result = result && !GR_isc_dsql_execute_immediate( m_status, &m_db, &m_trans, 0, createTable.c_str(), 1, NULL ) ;
     
            if( result )
            {
     
                wxMessageBox( wxT( "Nouvelle table cree : " ) + aNameTable ) ;
     
                if( Commit )
                    GR_isc_commit_transaction( m_status, &m_trans ) ;
     
                return true ;
     
            }
            else
            {
                wxLogError( wxT("Impossible de creer la table : ") + aNameTable + GetSqlErreur( m_status )  ) ;
            }
     
        }
     
        return false ;
     
    }
    Merci de votre attention .

  2. #2
    Membre éclairé Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut
    En regardant un peu mieux la documentation, l'option dialecte est sur les exemples à un. Mais si j'ai bien compris 1 correspond à interbase, 2 la migration entre interbase et firebird et 3 purement firebird. Donc j'ai essayé avec 3. Mais ça n'arrange rien.

    J'ai essayé avec un create table avec le nom de la table en minuscule, en majuscule, sans double cotes etc etc. Toujours la même erreur.

    Si cela peut aider, voici la documentation de isc_dsql_execute_immediate.

    isc_dsql_execute_immediate()
    Prepares and executes just once a DSQL statement that does not return data. There is a
    special case of isc_dsql_execute_immediate() for creating databases.
    Syntax
    ISC_STATUS isc_dsql_execute_immediate(
    ISC_STATUS *status_vector,
    isc_db_handle *db_handle,
    isc_tr_handle *trans_handle,
    unsigned short length,
    char *statement,
    unsigned short dialect,
    XSQLDA *xsqlda);

    Note In the special case where the statement is CREATE DATABASE, there is no transaction, so db_handle and trans_handle must be pointers to handles whose value is NULL. When isc_dsql_execute_immediate() returns, db_handle is a valid handle, just as though you had made a call to isc_attach_database().

    Parameter Type Description
    status_vector ISC_STATUS * Pointer to the error status vector
    db_handle isc_db_handle *

    • If statement is not CREATE DATABASE, this is a pointer to a database
    handle set by a previous call to isc_attach_database(); db_handle
    returns an error in status_vector if it is NULL

    • If statement is CREATE DATABASE, this must point to a database
    handle whose value is NULL
    trans_handle isc_tr_handle *

    • If statement is not CREATE DATABASE, this is a pointer to a
    transaction handle whose value has been set by a previous
    isc_start_transaction() call; trans_handle returns an error if NULL

    • If statement is CREATE DATABASE or SET TRANSACTION, this must point
    to a transaction handle whose value is NULL length unsigned short Length of the DSQL statement in bytes; set to 0 in C programs to indicate a null-terminated string

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    737
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 737

  4. #4
    Membre éclairé Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut
    Merci je connais.

  5. #5
    Membre Expert

    Homme Profil pro
    Consultant spécialité Firebird
    Inscrit en
    Mai 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant spécialité Firebird
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 342
    Par défaut
    un create table sans définition de colonne ????
    il faut définir au moins une colonne

  6. #6
    Membre éclairé Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut
    Bien vue :p Mici

    Ça fonctionne sauf pour la partie avec le IF NOT EXISTS.
    Mon petit doigt me dit que isc_dsql_execute_immediate étant prévu pour les requêtes sans résultat il doit pas aimer la partie avec le SELECT.
    Je vais tester avec un simple isc_dsql_execute.

  7. #7
    Membre éclairé Avatar de Suryavarman
    Homme Profil pro
    Développeur 3D
    Inscrit en
    Mai 2006
    Messages
    233
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur 3D
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Mai 2006
    Messages : 233
    Par défaut
    J'obtiens la même erreur en passant avec un isc_dsql_execute.
    soit je fais quelque chose de travers avec les fonctions de l'API soit ma requête est bidon. (j'opte pour la requête )

Discussions similaires

  1. SQL requête CREATE TABLE
    Par jeanmi11 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 25/07/2011, 21h09
  2. Réponses: 6
    Dernier message: 23/07/2010, 10h24
  3. execution requête CREATE TABLE ne pas afficher la table
    Par pancratee dans le forum VBA Access
    Réponses: 2
    Dernier message: 28/12/2009, 10h53
  4. Réponses: 2
    Dernier message: 17/06/2009, 11h16
  5. Réponses: 4
    Dernier message: 25/10/2005, 20h42

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