Requete SQL avec Builder C++ 6 - C++ - Programmation
Marsh Posté le 04-08-2004 à 18:58:07
lolo81 a écrit : Et donc ca ne marche pas! |
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 ?
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" );
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" )));
Marsh Posté le 05-08-2004 à 16:43:02
Tu peux m'expliquer plus précissemment stp, je comprend pas tout?
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 ?
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?
Marsh Posté le 05-08-2004 à 22:52:48
benh c'était parce que je connaissais pas le nom de ton query
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 "."
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?
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
T'as jamais utilisé les fonctions genre printf et compagnie ?
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
++
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).
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?
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).
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
Marsh Posté le 07-08-2004 à 19:20:07
%d'%s'
il manquerait pas une virgule là ?
idem entre le 13 et la date
Marsh Posté le 08-08-2004 à 12:20:08
non non la jai mal recopié mais sur mon prog il ya les virgules
Marsh Posté le 08-08-2004 à 12:21:56
Faut vérifier que tes valeurs correspondent bien aux colonnes de ta table...
Marsh Posté le 23-08-2004 à 15:36:46
non c toujours pas ca (avec un peu de retard), cela correspond bien
Marsh Posté le 25-08-2004 à 21:29:51
benh sans plus de détails personne pourra te répondre
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!
Marsh Posté le 31-08-2004 à 10:32:12
Structure de la table et requête complète, par exemple...
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.
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.
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.
Marsh Posté le 13-11-2004 à 23:49:31
antp a écrit : Access est assez chiant avec le format de la date. |
+1
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?
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
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
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?