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

 Delphi Discussion :

dbgrid et insertion dans une table


Sujet :

Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de xspray
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 23
    Par défaut dbgrid et insertion dans une table
    Bonjour

    J'ai un petit problème avec la récuperation d'un enregistrement à partir d'une dbgrid

    J'ai essayer ça:

    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
    procedure TForm6.Ajouteramaliste1Click(Sender: TObject);
    var
    cnum:integer;
    cnom,citemprt :string;
    csct,csmt,cslt,crct,crmt,crlt : real;
     
    begin
     dm.IBQuery1.Close;
     dm.IBQuery1.SQL.Clear;
     dm.IBQuery1.SQL.Text:=('select NUM, NOM, ITEMPRT, SCT, SMT, SLT, RCT,    RMT, RLT from '+ ComboBox1.text); 
     dm.IBQuery1.Open;
      cnum:= dm.IBQuery1.FieldByName('num').AsInteger;
      cnom:=dm.IBQuery1.FieldByName('nom').asString;
      citemprt:=dm.IBQuery1.FieldByName('itemprt').asString;
      csct:=dm.IBQuery1.FieldByName('SCT').AsFloat;
      csmt:=dm.IBQuery1.FieldByName('SMT').AsFloat;
      cslt:=dm.IBQuery1.FieldByName('SLT').AsFloat;
      crct:=dm.IBQuery1.FieldByName('RCT').AsFloat;
      crmt:=dm.IBQuery1.FieldByName('RMT').AsFloat;
      crlt:=dm.IBQuery1.FieldByName('RLT').AsFloat;
     
    dm.IBQuery1.Close;
    dm.IBQuery1.SQL.Clear;
    dm.IBQuery1.SQL.Add('insert into ' + combobox2.Text + '(NUM, NOM, ITEMPRT, SCT, SMT, SLT, RCT, RMT, RLT) values ('+inttostr(cnum)+','+cnom+','+citemprt+','+floattostr(csct)+','+floattostr(csmt)+','+floattostr(cslt)+','+floattostr(crct)+','+floattostr(crmt)+','+floattostr(crlt)+')');
    decimalseparator:=',';
    dm.IBQuery1.ExecSQL;
     
    end;

    combobox1 contient le nom de la table de l'enregistrement à copier
    et combobox2 le nom de la table de destination

    Le but de cette procedure qui ce trouve dans un menupopup est qu'en me positionnant sur une ligne d'une dbgrid je puisse recopier juste cette ligne vers mon autre table .

    Actuellement j'ai un message d'erreur me disant "token unknown-line1,char 85 _AC...".

    Le 1_AC est une donner de ma table mais il m'indique "_AC "je sais que mon code copie le premier enregistrement de ma table mais ce n'est pas ce que je recherche si quelqu'un pouvait me donner une piste pour me positionner sur le bon enregistrement via la dbgrid ce serrait sympa

    Merci à tous

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 094
    Par défaut
    Regarde plutôt ParamByName, il y a plein de sujet sur le forum, cela aidera pour gérer les " ou ' dans un SQL, cela évitera des concaténations de chaines pas très lisible

    ton ... Text:=( ... est très étrange ...

    Ensuite, tu utilise un DBGrid d'une étrange façon ...


    ajoute la Balise [ CODE] par via l'icone #
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre averti Avatar de xspray
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 23
    Par défaut
    ok merci pour ta reponse

    la dbgird represente une liste générale et j'aimerais utiliser des liste plus petites et changer leurs contenus régulierement. Je pourrais passer par la creation de vues via sql mais le probleme resterait le meme en ce qui concerne la copie des lignes individuelles vers une autre table ou autre vue, simplement en positionant le curseur sur l'enregistrement de la dbgrid et en appellant ma procedure via un menupopup.

  4. #4
    Membre averti Avatar de xspray
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 23
    Par défaut
    Finalement en utilisant un IBTable je me raproche de ce que je voudrais faire
    le code devient


    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
    begin
     
    dm.Queri1.Close;
    dm.Queri1.SQL.Clear;
    dm.Queri1.SQL.Add('select NUM, NOM, ITEMPRT, SCT, SMT, SLT, RCT, RMT, RLT from '+ ComboBox1.text);
    dm.Queri1.Open;
     
     
      cnum:= dm.IBTable1NUM.Value;
      cnom:=dm.IBTable1NOM.Value;
      citemprt:=dm.IBTable1ITEMPRT.Value;
      csct:=dm.IBTable1SCT.Value;
      csmt:=dm.IBTable1SMT.Value;
      cslt:=dm.IBTable1SLT.Value;
      crct:=dm.IBTable1RCT.Value;
      crmt:=dm.IBTable1RMT.Value;
      crlt:=dm.IBTable1RLT.Value;
     
    dm.Queri1.Close;
    dm.Queri1.SQL.Clear;
    dm.Queri1.SQL.Add('insert into ' + combobox2.Text + '(NUM, NOM, ITEMPRT, SCT, SMT, SLT, RCT, RMT, RLT) values ('+inttostr(cnum)+','+quotedstr(cnom)+','+quotedstr(citemprt)+','+floattostr(csct)+','+floattostr(csmt)+','+floattostr(cslt)+','+floattostr(crct)+','+floattostr(crmt)+','+floattostr(crlt)+')');
    decimalseparator:=',';
    dm.Queri1.ExecSQL;
     
    end;

    Mais j'ai souvent le message d'erreur "Count of columns does not equal count of values"

    Si quelqu'un a une idée pour résoudre ce probleme elle est la bien venue.
    Je pense qu'il me manque une instruction pour dire au programe de rajouter la ligne copiée en fin de table et d'ignorer le reste..? enfin je crois .
    Merci pour votre aide

  5. #5
    Membre averti Avatar de xspray
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 23
    Par défaut
    Voila probleme résolu
    Pourquoi faire compliquer quand on a des ibtable

    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
    begin
      cnum:= dm.IBTable1NUM.Value;
      cnom:=dm.IBTable1NOM.Value;
      citemprt:=dm.IBTable1ITEMPRT.Value;
      csct:=dm.IBTable1SCT.Value;
      csmt:=dm.IBTable1SMT.Value;
      cslt:=dm.IBTable1SLT.Value;
      crct:=dm.IBTable1RCT.Value;
      crmt:=dm.IBTable1RMT.Value;
      crlt:=dm.IBTable1RLT.Value;
     
      dm.IBTable1.Active:=false;
      dm.IBTable1.TableName:=(combobox2.text);
      dm.IBTable1.Active:=true;
      dm.IBTable1.Append;
     
      dm.IBTable1NUM.Value:=cnum;
      dm.IBTable1NOM.Value:=cnom;
      dm.IBTable1ITEMPRT.Value:=citemprt;
      dm.IBTable1SCT.Value:=csct;
      dm.IBTable1SMT.Value:=csmt;
      dm.IBTable1SLT.Value:=cslt;
      dm.IBTable1RCT.Value:=crct;
      dm.IBTable1RMT.Value:=crmt;
      dm.IBTable1RLT.Value:=crlt;
     
      dm.IBTable1.Next;
      dm.IBTable1.close;
      dm.IBTable1.TableName:=(combobox1.Text);
      dm.IBTable1.Active:=true;
    end;

  6. #6
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Par défaut

    Citation Envoyé par xspray Voir le message
    Mais j'ai souvent le message d'erreur "Count of columns does not equal count of values"
    ce message d'erreur signifie simplement que pour ton ordre sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO TABLENAME (COL1, COL2, COL3) VALUES (VAL1,VAL2,VAL3)
    le nombre de colonnes indiqué (col1, col2, ...)ne correspond pas au nombre de valeurs spécifiées (val1, val2, ...).
    vérifie si ton code à un moment ou à un autre n'omet pas certaines valeurs.


    Citation Envoyé par xspray Voir le message
    Pourquoi faire compliquer quand on a des ibtable
    si par compliqué tu entends utiliser des XXQuery, eh bien c'est tout simplement parce que si ta table a un nombre important d'enregistrements tu va au devant de beaucoup de soucis

  7. #7
    Membre averti Avatar de xspray
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 23
    Par défaut
    salut evarisnea

    Je vais donc retourner voir ce qui clochait avec les querys car à un momment ou à un autre je devrait surement avoir besoin de gerer des quantitées importantes de données

    Merci pour ta reponse

Discussions similaires

  1. [ZEOSLIB] Problème Insertion dans une table
    Par moscovisci dans le forum Bases de données
    Réponses: 1
    Dernier message: 09/06/2005, 12h05
  2. [interbase6]probleme d'insertion dans une table
    Par macadam314 dans le forum Bases de données
    Réponses: 10
    Dernier message: 22/02/2005, 14h21
  3. [Sybase] Temps d'une insertion dans une table
    Par vsavoir dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 14/02/2005, 10h04
  4. Extraction d'un .txt et Insertion dans une table
    Par PoPmiSiR dans le forum Access
    Réponses: 8
    Dernier message: 28/10/2004, 19h13
  5. Détection insertion dans une Table
    Par abelman dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 06/07/2004, 14h24

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