Requete SQL avec Builder C++ 6

Requete SQL avec Builder C++ 6 - C++ - Programmation

Marsh Posté le 04-08-2004 à 18:41:28    

Voila mon probléme:
 
J'ai une base de donnée sous Access et un programme réalisé avec C++Builder6 et donc pour mettre des données dans ma table de ma base de données j'utilise une requete SQL.
Mais comme les données que je donne a ma table sont variables il me faut insérer du code dans ma requete, car je récupére des valeurs saisies au clavier par l'utilisateur.Et donc ca ne marche pas!
Pouvez vous m'aider?

Reply

Marsh Posté le 04-08-2004 à 18:41:28   

Reply

Marsh Posté le 04-08-2004 à 18:58:07    

lolo81 a écrit :

Et donc ca ne marche pas!
Pouvez vous m'aider?


 
Pas avec une description aussi précise de ce qui ne marche pas... quel est le problème ? Tu ne sais pas comment assembler les données dans la requête, ou bien tu as une erreur avec le code que t'as mis ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 05-08-2004 à 14:39:56    

Quand les données sont fixes ca marche nikel,dés que j'insére du code ou un nom de variable dans ma requete ca plante.
Du style:
 
INSERT INTO Donnees
VALUES (12,10,13,temperature,"ca marche pas" );

Reply

Marsh Posté le 05-08-2004 à 15:24:37    

...SQL.Text = Format("INSERT INTO Donnees VALUES (12,10,13,%d,%s)", ARRAYOFCONST((temperature, "ca marche pas" )));


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 05-08-2004 à 16:43:02    

Tu peux m'expliquer plus précissemment stp, je comprend pas tout?

Reply

Marsh Posté le 05-08-2004 à 16:48:10    

benh je construits une chaîne à partir de variable, un peu comme printf/sprintf
 
T'assignes pas tes requêtes SQL à un la propriété "SQL" d'un TQuery ou TADOQuery ?


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 05-08-2004 à 22:48:45    

ok et c'est koi les ...   avant SQL.Text
si j'assignes la requeter a la propriété SQL du TQuery, faut pas?

Reply

Marsh Posté le 05-08-2004 à 22:52:48    

benh c'était parce que je connaissais pas le nom de ton query :p
 
NomDeTonQuery->SQL->Text = ...
(ici les ... représentent ce que j'avais mis plus haut)
 
Et j'ai toujours cette manie de mettre des "." au lieu des "->" vu qu'en Delphi il fait le lien tout seul avec des "."


Message édité par antp le 05-08-2004 à 22:53:23

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 05-08-2004 à 23:01:38    

ok merci je vais essayer cela

Reply

Marsh Posté le 05-08-2004 à 23:28:35    

encore un pb, %d c'est bien pour une variable
est on obligé de mettre %d et %s a la fin?

Reply

Marsh Posté le 05-08-2004 à 23:28:35   

Reply

Marsh Posté le 05-08-2004 à 23:35:01    

%d = entier décimal
%s = chaine
ce sont les types des paramètres passés dans ARRAYOFCONST((...)) ensuite.
lire l'aide fournie avec Builder ça peut servir :o
T'as jamais utilisé les fonctions genre printf et compagnie ? :heink:


Message édité par antp le 05-08-2004 à 23:35:40

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 06-08-2004 à 09:03:16    

Tu peux faire un sprintf pour creer ta requete come une grande chaine de caractères.
 
sprintf(requete,"insert into  table values(12,15,....,%d",Temperature);
 
Ensuite tu poeux utiliser reuquete qui correspondra a ce que tu ve comme requete sql
++

Reply

Marsh Posté le 06-08-2004 à 09:20:14    

Ouais enfin le sprintf n'a aucun intérêt ici, autant utiliser Format (qui fonctionne de la même façon mais qui renvoie une AnsiString au lieu de remplir un char *) vu qu'il utilise quand même la VCL pour la connexion.  
 
sprintf l'oblige à avoir une variable temporaire, et il y a le risque de dépasser la taille du buffer (ou alors il faut utiliser snprintf).


Message édité par antp le 06-08-2004 à 09:20:24

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 07-08-2004 à 17:33:55    

Encore un petit probleme un message d'erreur disant "trop peu de parametres 1 manquant'.' " quand je fait cela:
 
RequeteValid->SQL->Text =
        Format("INSERT INTO Donnees VALUES (12,'01/22/04',%d,34,10,10,34,%s)"
        , ARRAYOFCONST((temp_mini,"toto" )));
        RequeteValid->ExecSQL();
 
et je passe le nombre de parametres pour la table qu'il faut alors?

Reply

Marsh Posté le 07-08-2004 à 17:36:09    

Le %s doit être entre apostrophes aussi (comme la date) si c'est un champ de type chaîne/texte
Il faut voir si tes paramètres correspondent exactement aux colonnes de "Donnees" (order & nombre).


Message édité par antp le 07-08-2004 à 17:36:42

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 07-08-2004 à 17:45:16    

yes cetait ca merci bocou

Reply

Marsh Posté le 07-08-2004 à 18:28:52    

encore un truc
quand je fait:
 RequeteValid->SQL->Text =
Format("INSERT INTO Donnees VALUES (13'01/22/04',%d,%d,%e,%e,%d'%s')"
        , ARRAYOFCONST((temp_mini, temp_maxi, pluvio, hygro, pression, "test" )));
        RequeteValid->ExecSQL();
 
une erreur me dit que le nombre de valeurs de la requete doit correspondre avec le nombre de champs....
pourtant cela correspond

Reply

Marsh Posté le 07-08-2004 à 19:20:07    

%d'%s'
 
il manquerait pas une virgule là ?
 
idem entre le 13 et la date


Message édité par antp le 07-08-2004 à 19:20:18

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 08-08-2004 à 12:20:08    

non non la jai mal recopié mais sur mon prog il ya les virgules

Reply

Marsh Posté le 08-08-2004 à 12:21:56    

Faut vérifier que tes valeurs correspondent bien aux colonnes de ta table...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 23-08-2004 à 15:36:46    

non c toujours pas ca (avec un peu de retard), cela correspond bien

Reply

Marsh Posté le 25-08-2004 à 21:22:46    

il y a qqun pour me repondre?

Reply

Marsh Posté le 25-08-2004 à 21:29:51    

benh sans plus de détails personne pourra te répondre


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 30-08-2004 à 22:34:04    

quel details supplémentaires vous faut il , ca me met juste que le nombre de valeurs ne correspond pas avec ma table!

Reply

Marsh Posté le 31-08-2004 à 10:32:12    

Structure de la table et requête complète, par exemple...


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 13-11-2004 à 15:04:42    

Bon je sais cela fait longtemps, mais j'avais abandonné mon programme quelques temps et maintenant je m'y remet et je n'ai toujours pas trouvé la solution à mon probléme donc je récapitule. :pt1cable:  
   J'ai donc une table "Donnees" avec 8 champs:
 
"N°" qui est un numéro auto
"Date" qui est une date,général
"Temp_mini"  entier long
"Temp_maxi"  entier long
"Pluviometrie"  réel double
"Hygrometrie"   réel double
"Pressions"   entier long
"Observations"  Texte
 
Puis je réalise la requete SQL suivante:
 
RequeteValid->SQL->Text =
Format("INSERT INTO Donnees VALUES (13,'01/22/04',%d,%d,%e,%e,%d,'%s')"
,ARRAYOFCONST((temp_mini, temp_maxi, pluvio, hygro, pression, "test" )));
        RequeteValid->ExecSQL();  
 
Et j'obtient l'erreur suivante:
 
"Le nombre de valeurs de la requete doit coincider avec le nombre de champs"
 
Merci de votre aide.

Reply

Marsh Posté le 13-11-2004 à 23:43:04    

Access est assez chiant avec le format de la date.
Il faut l'entourer de # au lieu de ' il me semble.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 13-11-2004 à 23:49:31    

antp a écrit :

Access est assez chiant avec le format de la date.
Il faut l'entourer de # au lieu de ' il me semble.

+1


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 14-11-2004 à 14:48:54    

Ben je comprend et je m'apercois qu'ACCESS est trés chiant et donc j'ai essayé de mettre des # pour la date mais cela ne change rien et j'ai toujours la meme erreur!!
Alors d'où cela peut il venir?

Reply

Marsh Posté le 14-11-2004 à 15:10:42    

Tu mets vraiment "test" ou bien tu passes une variable ? parce que si la variable contient des ' ça foire (il faut utiliser QuotedStr pour ça)
Sinon je ne vois pas ce qui foire :/
Essaie de spécifier les champs dans la requête :
... INTO Donnees ('N°', 'Date', .....) VALUES ( ....
par contre le ° dans le nom du champ c'est un coup à avoir des problèmes :D


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 17-11-2004 à 14:35:29    

Bon je ne sais vraiment pas d'où cela vient, je mets bien "test" (ce n'est pas une variable), j'ai également essayer de spécifier le nom des champs dans la requete et ça ne change rien!!!
Et quand au ° je l'ai enlevé et ça ne change rien!
 
Aidez moi :(

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed