Requete trop longue

totob0 Messages postés 19 Date d'inscription jeudi 4 janvier 2007 Statut Membre Dernière intervention 28 novembre 2008 - 31 mars 2007 à 23:24
tilab Messages postés 95 Date d'inscription mercredi 25 octobre 2006 Statut Membre Dernière intervention 26 octobre 2009 - 24 oct. 2007 à 21:15
bonjour,
un  problème  dans mon projet m'enpeche d'avancer il s'agit donc d'une requete SQL et voici le message d'erreur;
 "les chaine ne doivent pas depasser 255 caractères"
 et voici la requete:
                      
                      Form1.Query1.SQL.Clear;
                      Form1.Query1.DatabaseName:='pizzeria';
                      Form1.Query1.DataSource:=form8.DataSourceHistorique;
                     query1.SQL.Add('insert into commandes_produits (num_commandes,num_produits,nom_com_produits,description_com_produits,taille_com_produits,prix_com_produits,num_employes_com_produits,heure_com_produits,quantite_com_produits,num_cli_com_produits)select num_commandes,num_com_produits,nom_commandes,description_commandes,taille_commandes,prix_commandes,num_employes,heure_commandes,quantite_commandes,num_cli_commandes from produits where code_produits='''+edit12.text+'''');

                      Form1.Query1.Prepared:=true;
                      Form1.Query1.ExecSQL;
desolé pour la mise en forme  mais c'est toute la requete telle qu'elle, que dois-je faire quand elle est trop longue je ne sais pas la couper car ça ne donneras plus le resultats voulu ,  c'est d'en fait aller enregistrer tout le contenu de la table"commandes " dans une autre table si quelqu'un sait m'aider avec ça ou une autre méthode ça serait très gentil
merçi d'avance et bonne vacances de paques. 

11 réponses

japee Messages postés 1727 Date d'inscription vendredi 27 décembre 2002 Statut Modérateur Dernière intervention 6 novembre 2021 8
1 avril 2007 à 03:17
Salut,

Les bases de données c'est pas ma spécialité, mais à mon avis, ça ne peut pas passer.
Limitation à 256 caractères + tu ne peux pas fractionner ta requête = mission impossible.
J'ai essayé pour voir avec query1.SQL.Text, la limitation est la même.
Il te faut sans doute trouver une autre approche que Query ? Je laisse la main aux spécialistes du DBE.

Bonne prog'
0
totob0 Messages postés 19 Date d'inscription jeudi 4 janvier 2007 Statut Membre Dernière intervention 28 novembre 2008
1 avril 2007 à 13:37
bonjour, je suis toujours au meme niveau, cependant si vous connaissez un autre moyen q'une requete pour enregistrer le contenu d'une table dans une autre faites moi part de  celle -ci,
et de mon coté je continu à chercher merçi.
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
2 avril 2007 à 13:33
salut,

je suis très (très) loin d'être un spécialiste DB, mais je veux veux bien essayer de te filer un coup de main.

hum "tout le contenu" un *ça marcherait pas?

pourquoi ne pas faire un insert avec seulement quelques valeurs (colonne), puis faire un update ? (vu que tu as un code_produit que je suppose être une clès principal)
Sinon, une autre solution (sûrement trop compliquée) serrait de nommée des champs avec des abréviation (genre cmd command, prd produit, ...)

aussi, un truc que j'utilise pour simplifier certaines requêtes : les vue . (ie: select stocké côté BD utilisable comme une table). Note que je ne sais pas si ce genre de fct sont disponible sur tout les systèmes de DB.

En espérant t'avoir filer un coup de main et ne pas avoir dit trop de connerie,

Loda
<hr size ="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0
gebu34 Messages postés 118 Date d'inscription samedi 9 décembre 2006 Statut Membre Dernière intervention 17 novembre 2009
2 avril 2007 à 16:53
Salut,
J'ai eu un cas semblable sur du SQL.....Il faut tronçonner ta requete en plusieurs string...
Puis tu fais un Concat global....que tu appliques....
J'avais pu m'en sortir comme ça
A+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gebu34 Messages postés 118 Date d'inscription samedi 9 décembre 2006 Statut Membre Dernière intervention 17 novembre 2009
2 avril 2007 à 17:45
Salut,
Tu n'est obligé de passer toute ta requête dans Add, fais le pat étape.......
(c'est un exemple bien sûr)
query1.SQL.Add('SELECT.............');
query1.SQL.Add('FROM.............');

query1.SQL.Add('INNER JOIN.............');


query1.SQL.Add('WHERE.............');



query1.SQL.Add('GROUP BY.............');




Tant que n' pas appliqué Clear, les textes s'empilent à la suite.....
Perso je travaille avec ADO et je dépasse largement les 255 caractères.....
A+
0
totob0 Messages postés 19 Date d'inscription jeudi 4 janvier 2007 Statut Membre Dernière intervention 28 novembre 2008
4 avril 2007 à 15:28
bonjour à tous je tiens à vous remercier pour votre aide , c'était une situatio compliquée dans laquelle j'étais , mais cependant j'ai trouvé la solution ça pourra aider ce qui seront un jour dans le
meme cas  alrs c'est tout simplement ceci;
                      Form1.Query1.SQL.Clear;
                      Form1.Query1.DatabaseName:='pizzeria';
                      Form1.Query1.DataSource:=form8.DataSourceHistorique;

                      query1.SQL.Add('insert into pizzeria.commandes_produits select *from pizzeria.commandes' );
                         ou soit               ('insert into Nom base de donnée.Table1 select *from Nom base de donnée.Table2' );
        
                      Form1.Query1.Prepared:=true;
                      Form1.Query1.ExecSQL;
encore merçi.
0
totob0 Messages postés 19 Date d'inscription jeudi 4 janvier 2007 Statut Membre Dernière intervention 28 novembre 2008
4 avril 2007 à 15:32
 bonjour les amis encore moi, desolé de vous embetez mais j'ai un autre problème plus complexe maintenant
 voici le code source;

     Form8.TableHistorique.Refresh;
     Form1.Query1.SQL.Clear;
     Form1.Query1.DatabaseName:='pizzeria';
     Form1.Query1.DataSource:=DatasourceHistorique;
     Form1.Query1.SQL.Add('SELECT *  FROM commandes_produits ORDER BY  num_produits');
     Form1.Query1.Active:=true;
     Form1.Query1.Open;

il n'ya pas de message d'erreur ou quoi que ce soit d'autre , mais aucune réaction ça ne retourne aucun résultat, le comble c'est que ça marche directement dans la base de données,
mais pas dans le code source de delphi .
help me please...
0
gebu34 Messages postés 118 Date d'inscription samedi 9 décembre 2006 Statut Membre Dernière intervention 17 novembre 2009
4 avril 2007 à 15:59
Salut,
avant le Sql.Clear il faut que tu désactive ton objet Form1.Query1.Active = False;
Pourquoi ne pas passer ton DataBaseName et ton DataSource directement sur l'objet ?
A+
0
totob0 Messages postés 19 Date d'inscription jeudi 4 janvier 2007 Statut Membre Dernière intervention 28 novembre 2008
5 avril 2007 à 04:07
bonjour, j'ai essayé mais toujours rien j'en suis au meme point et sans aucune explication...
merçi quand meme.
0
gebu34 Messages postés 118 Date d'inscription samedi 9 décembre 2006 Statut Membre Dernière intervention 17 novembre 2009
5 avril 2007 à 10:39
Salut,
N'ayant pas ton projet sous les yeux, les déductions ne sont pas facile.
Je pense que ton TQuery pointe sur un TDataBase.
Est-il Connected := true;
A+
0
tilab Messages postés 95 Date d'inscription mercredi 25 octobre 2006 Statut Membre Dernière intervention 26 octobre 2009 4
24 oct. 2007 à 21:15
salut un peu de mise en forme (la ligne ne doit pas dépasser 255 caractères!)

code:
with Form1 do
begin
    with Query1 do
    begin
        DatabaseName:='pizzeria';
        DataSource:=form8.DataSourceHistorique;
        with SQL do
        begin
            Clear;
            Text := 'insert into commandes_produits (num_commandes, num_produits, nom_com_produits, ' +
                        'description_com_produits, taille_com_produits, prix_com_produits, num_employes_com_produits, ' +
                       'heure_com_produits,quantite_com_produits,num_cli_com_produits) ' +
                       'select
num_commandes, num_com_produits, nom_commandes, description_commandes, ' +
                       'taille_commandes, prix_commandes, num_employes, heure_commandes, quantite_commandes, ' +
                       'num_cli_commandes
from produits where code_produits = ''' + edit12.text + '''';
        end;
    end;
end;

ta solution est correcte si tes deux tables ont le même ordre des champs!!!!

pour la deuxième question regarde si le database est connecté, si la query pointe vers le database et que le datasource pointe vers la query et que le composant de visualisation pointe vers le datasource.

PS:
Form1.Query1.Active:=true;
Form1.Query1.Open;
ne sert a rien car le faite de Active := True ouvre automatiquement la query ou tu utilises Active := True ou bien Open.

si tu change le Sql.Text la query se ferme automatiquement

Alex
0
Rejoignez-nous