J'ai une table dans laquelle je voudrais insérer une nouvelle colonne.
Petit problème je sais pas comment on fais. Ni comment on rempli cette colonne.
Merci d'avance.
Version imprimable
J'ai une table dans laquelle je voudrais insérer une nouvelle colonne.
Petit problème je sais pas comment on fais. Ni comment on rempli cette colonne.
Merci d'avance.
Une table quoi ? paradox, access, mysql, ... ???Citation:
Envoyé par scorpion37
;)
Un table mysql.
Alors, je ne suis pas un pro de SQL(ni d'autre chose d'ailleurs mais bon :D ) mais j'ai trouvé ca en faisant des recherches :
La requete permettant l'ajour d'une colonne :
En espérant t'aider. ;)Code:
1
2 ALTER TABLE TaTable ADD COLUMN nom TEXT(25)
Salut,
Pour ton pb, d'apres la faq:
Tu peux aller voir par ici pour d'autres informationsCitation:
Comment ajouter, supprimer ou modifier une colonne dans une table ?
ALTER TABLE latable ADD / MODIFY / DROP / RENAME lacolonne
http://dev.mysql.com/doc/mysql/fr/ALTER_TABLE.html
Pour remplir cette colonne utilise INSERT INTOCitation:
Merci je vais essayé.
Tu saurais pas comment la remplir?
Pour remplir, fais comme cet exemple
ps: c'est le 1er que j'ai trouvé et comme on est en plein dans le foot avec le mondial ;)Citation:
INSERT INTO rencontre (id_domicile, id_visiteurs, date_match, arbitre) VALUES (id_dom, id_vis, date_m, arbitre_m);
Ok merci, en fet je me suis mal exprimé je veut le faire dans builder.
Avec Builder tu fais comme ça
Code:
1
2
3
4
5 Query_mysql_insert->SQL->Clear(); AnsiString requete_insert = "INSERT INTO "+nom_table+"(code_objet,lib_gpmi,stock,prix) VALUES ( '"+Trim(tableau_gpmi[i][0])/*tableau_gpmi[i][0].SubString(1,7)*/+"' , "+QuotedStr(tableau_gpmi[i][1])+" , '"+tableau_gpmi[i][2]+"' , '"+tableau_gpmi[i][3]+"' )" ; Query_mysql_insert->SQL->Add(requete_insert) ; Query_mysql_insert->ExecSQL(); Query_mysql_insert->Close();
Il te faut pour cela un composant TQuery pour exprimer tes requetes.
Mais également un TSession et un TDatabase pour te connecter à ta base de donnée SQL ;)
sur qu avant d'insérer c'est bien de s'etre connecté.Citation:
Il te faut pour cela un composant TQuery pour exprimer tes requetes.
Mais également un TSession et un TDatabase pour te connecter à ta base de donnée SQL
j'ai été plus vite que la musique, dsl.:aie:
Et moins j'avais oublié de dire ce qu'il fallait faire ensuite :lol:Citation:
Envoyé par mike600river
Au moins les réponses sont complémentaires ;)
Merci a tous les deux.
Mais je comprend pas la deuxième ligne.Citation:
Avec Builder tu fais comme ça
Code :
Query_mysql_insert->SQL->Clear();
AnsiString requete_insert = "INSERT INTO "+nom_table+"(code_objet,lib_gpmi,stock,prix) VALUES ( '"+Trim(tableau_gpmi[i][0])/*tableau_gpmi[i][0].SubString(1,7)*/+"' , "+QuotedStr(tableau_gpmi[i][1])+" , '"+tableau_gpmi[i][2]+"' , '"+tableau_gpmi[i][3]+"' )" ;
Query_mysql_insert->SQL->Add(requete_insert) ;
Query_mysql_insert->ExecSQL();
Query_mysql_insert->Close();
La ligne 2 il y a rien :mouarf:
sinon pour la deuxieme ligne de code, c'est tout simplement une requete pour inserer des données dans ta table, le nom de ta table est stocké dans la variable nom_table est les données dans le tableau tableau_gpmi.
c'est mon code avec des variables, de facon generale ca s'ecrit:Citation:
AnsiString requete_insert = "INSERT INTO "+nom_table+"(code_objet,lib_gpmi,stock,prix) VALUES ( '"+Trim(tableau_gpmi[i][0])/*tableau_gpmi[i][0].SubString(1,7)*/+"' , "+QuotedStr(tableau_gpmi[i][1])+" , '"+tableau_gpmi[i][2]+"' , '"+tableau_gpmi[i][3]+"' )" ;
Citation:
AnsiString requete_insert = "INSERT INTO nom_de_ta_table (champ1,champ2,...) VALUES (valeur_du_champ1, valeur_du_champ2,...)" ;
Plus simplement tu dois comprendre la 2ème ligne (ta requete ) ainsi :Code:
1
2
3
4
5
6
7
8
9
10 Query_mysql_insert->SQL->Clear(); /* Efface l'éventuelle reniére requete */ /* insert dans ta table (nom_table) les valeurs (valeur pour la colonne 1, pour la colonne 2,...) AnsiString requete_insert = "INSERT INTO "+nom_table+"(code_objet,lib_gpmi,stock,prix) VALUES ( '"+Trim(tableau_gpmi[i][0])/*tableau_gpmi[i][0].SubString(1,7)*/+"' , "+QuotedStr(tableau_gpmi[i][1])+" , '"+tableau_gpmi[i][2]+"' , '"+tableau_gpmi[i][3]+"' )" ; /* Ajoute la requete */ Query_mysql_insert->SQL->Add(requete_insert) ; Query_mysql_insert->ExecSQL(); /* L'excécute */ Query_mysql_insert->Close(); /* ferme */
J'espere que c'est ca sinon corrigez moi ;)Code:
1
2 INSERT INTO TaTable VALUES("valeur pour la premiere colonne", "pour la 2ème",...);
petite correction
;)Citation:
INSERT INTO TaTable (nom_colonne1, nom_colonne2,...) VALUES("valeur pour la premiere colonne", "pour la 2ème",...);
Citation:
Envoyé par mike600river
Vi exact autant pour moi :lol:
Merci pour votre aide.
Mais j'arrive toujours pas a créer ma colonne dans la table.
Je crois que je me suis mal exprimé.
J'ai une table qui existe et dans cette table je veut créer une colonne et la remplir.
il faut faire comme dit auparavant:
il faut que tu reprenne le modele pour executer une requete, ce qui donne qqchose comme çaCode:ALTER TABLE TaTable ADD COLUMN nom TEXT(25)
si ça marche tjs pas envoi le bout de code qui doit faire cette ajout de colonne qu on y voit + clair :DCode:
1
2
3
4
5 Query_mysql_insert->SQL->Clear(); AnsiString requete_insert = "ALTER TABLE TaTable ADD COLUMN nom TEXT(25)"; Query_mysql_insert->SQL->Add(requete_insert) ; Query_mysql_insert->ExecSQL(); Query_mysql_insert->Close();
Bonjour,
Je pense qu'un petit tour par http://sql.developpez.com/ ne serai pas du luxe :P
lanonyme
Le code qui me permet d'ajouter ma colonne est
aValue est un ansistring que je récupère d'excel.Code:
1
2
3
4
5
6
7
8
9 vRange = "B3"; vCell = vWorksheet.OlePropertyGet("Range",vRange); aValue = vCell.OlePropertyGet("Value"); IBQuery1->SQL->Clear(); AnsiString requete_insert = "ALTER TABLE RAPPORT ADD COLUMN aValue TEXT(25)"; IBQuery1->SQL->Add(requete_insert); IBQuery1->ExecSQL(); IBQuery1->Close();
Lors de la compilation, ca plante au niveau de la ligne soulignée.
Le message d'erreur est
"Dinamic SQL error SQL error code = -104
token unknown line1, char 40
COLUMN'. Processus stoppé"
Je comprend pas d'ou peu venir l'erreur!
Je sais pas si c'est la bonne erreur, mais déjà il faut que tu fasse ceci :au lieu de ceci :Code:
1
2 AnsiString requete_insert = "ALTER TABLE RAPPORT ADD COLUMN " ; requete_insert += aValue + " TEXT(25)";
Code:AnsiString requete_insert = "ALTER TABLE RAPPORT ADD COLUMN aValue TEXT(25)";
J'ai essayé ton code mais l'erreur reste la même.
J'ai trouvé l'erreur, enfin il me semble :
a la place de :Code:
1
2
3 AnsiString requete_insert = "ALTER TABLE RAPPORT ADD " ; requete_insert += aValue + " TEXT(25)";
Code:
1
2
3 AnsiString requete_insert = "ALTER TABLE RAPPORT ADD COLUMN " ; requete_insert += aValue + " TEXT(25)";
Maintenant c'est toujours la même erreur mais cette fois ci c'est plus "char40" mais la valeur "char x" dépend de la longueur de la chaine aValue.
nouvelle modif (désolé) :
on va peut etre y arriver un jour :DCode:
1
2 AnsiString requete_insert = "ALTER TABLE RAPPORT ADD '" ; requete_insert += aValue + "' TEXT(25)";
tu as testé ta requete directement dans ta BD, avec une valeur bidon pour aValue, pour voir si deja la structurede la requete est bonne?
le 'char x' indique a partir de quel caractere il trouve que sa pose probleme...Citation:
Envoyé par scorpion37
donc c'est la ou il faut regarder (normalement)
lanonyme
J'ai essayé directement dans ma BD, l'instruction
et j'ai le messageCode:ALTER TABLE RAPPORT ADD COLUMN ANGLAIS
Code:
1
2
3
4
5
6 Dynamic SQL Error SQL error code = -104 Token unknown - line 1, char 25 COLUMN Statement: ALTER TABLE RAPPORT ADD COLUMN ANGLAIS
essaie avec ce que disais pottiez, vire le COLUMN
J'ai essayé et cette fois ci le message est
Code:
1
2
3
4
5Dynamic SQL Error SQL error code = -104 Unexpected end of command Statement: ALTER TABLE RAPPORT ADD ANGLAIS
Maintenant ca marche dans la base de donnée mais pas dans builder.
Dans builder la ligne passe mais la colone ne se créer pas.
Dans la base de donnée:
Dans builder:Code:
1
2 ALTER TABLE RAPPORT ADD test DTEXT
ouCode:
1
2requete_insert = "ALTER TABLE RAPPORT ADD test DTEXT " ;
Code:
1
2
3 requete_insert = "ALTER TABLE RAPPORT ADD" ; requete_insert += test + "DTEXT";
je ferais plutot ça:
Qu est ce que ça te donne comme valeur pour requete_insert qd tu passe le code au debugger?Code:requete_insert = "ALTER TABLE RAPPORTCONFORMITEPINCE ADD ' "+test+" ' " DTEXT";
quand je passe le code au debuggeur:
C'est pour ca que je comprend pas pour quoi la colonne ne se créer pas.Code:
1
2 requete_insert = DATA {"ALTER TABLE RAPPORT ADD test DTEXT "}
ya un truc que je pige pas t as aucun message d'erreur?
tu as toujours
dans ton code?Code:IBQuery1->ExecSQL();
parcequ'avec
la colonne "test" devrait etre créée dans la table RAPPORTCode:requete_insert = "ALTER TABLE RAPPORT ADD test DTEXT " ;
selon moi ça devrait executer ta requete ou te renvoyer une erreur mais pas rien faire
Mon code est exactement:
et au debugger:Code:
1
2
3
4
5
6
7
8
9 IBDatabase1->Connected = true; IBQuery1->Open(); IBQuery1->SQL->Clear(); aValue= "test"; requete_insert = "ALTER TABLE RAPPORT ADD " + aValue + " TEXT"; IBQuery1->SQL->Add(requete_insert); IBQuery1->ExecSQL(); IBQuery1->Close();
Mais rien ne se passe.Code:
1
2 requete_insert = DATA {"ALTER TABLE RAPPORT ADD test TEXT"}
Merci quand même à tous le monde pour l'aide que vous m'avez apporté.
du code, pile ce que j'allais te demander :ccool:
j'ai testé ca et sur mon pc ca marche
et ca aussiCode:
1
2
3
4
5 Query_creer_famille->SQL->Clear(); AnsiString requete = " ALTER TABLE azerty ADD test31 TEXT " ; Query_creer_famille->SQL->Add(requete); Query_creer_famille->ExecSQL(); Query_creer_famille->Close();
Code:
1
2
3
4
5
6 Query_creer_famille->SQL->Clear(); String test = "test51"; AnsiString requete = " ALTER TABLE azerty ADD "+test+" TEXT " ; Query_creer_famille->SQL->Add(requete); Query_creer_famille->ExecSQL(); Query_creer_famille->Close();
c'est quoi le type de?Code:aValue