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

Bases de données Delphi Discussion :

Pb de requête.


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Points : 67
    Points
    67
    Par défaut Pb de requête.
    Bonjour,

    J'ai une requête qui me pose un problème mais je ne sais pas pourquoi (évidemment sinon je ne serais pas en train d'écrire ce post).

    Ma requête s'exécute très bien dans IBEasy mais dans mon programme, elle me revient avec un message d'erreur...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    arithmetic exception, numeric overflow, or string truncation
    Certain champs de ma requête sont intégralement remplis mais sans dépassement puisque sinon cela ne fonctionnerait pas sous IBEasy.

    En mode débbuguage, j'ai vu qu'à la fin de chaque IBSQL1.SQL.Append('bout de requête'), il y a un #$D#$A.

    Quelqu'un a une idée?

    Cyril.

  2. #2
    Nouveau membre du Club
    Inscrit en
    Juillet 2006
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 33
    Points : 36
    Points
    36
    Par défaut
    Le #$D#$A est normal et ne pose pas de problème. D'ailleurs tu en as un à chaque fois que tu fais un Add ou un Append. Pour le reste, il nous faudrait ta requête...

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Points : 67
    Points
    67
    Par défaut
    Bonjour,

    Effectivement, je me suis emballé pour rien avec le #$D#$A (13 et 10 en héxa soit un retour charriot).

    Cependant, il y a quand même un truc bizarre car ...
    Version 1:
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
     
    procedure TFRM_Menu.BitBtn_inserirClienteClick(Sender: TObject);
    var
      EntidadeId : String;
      Table : String;
      CEP : String;
      CPF : String;
      CNPJ : String;
      Fone1 : String;
      Fone2 : String;
      Fone3 : String;
      Fax : String;
      Nasc : String;
    begin
      CEP   := Form_fonctions.FormatFBCep(MskEdt_cliCep.Text);
      CPF   := Form_fonctions.FormatFBCpf(MskEdt_cliCpf.Text);
      CNPJ  := Form_fonctions.FormatFBCnpj(MskEdt_cliCnpj.Text);
      Fone1 := Form_fonctions.FormatFBFone(MskEdt_cliFone1.Text);
      Fone2 := Form_fonctions.FormatFBFone(MskEdt_cliFone2.Text);
      Fone3 := Form_fonctions.FormatFBFone(MskEdt_cliFone3.Text);
      Fax   := Form_fonctions.FormatFBFone(MskEdt_cliFax.Text);
      Nasc  := Form_fonctions.MagicQuote(Form_fonctions.FormatFBDate(MskEdt_cliDtNasc.Text));
     
      FRM_Login.OuvrirTransaction(IBSQL_cadastro.Transaction);
      try
        IBSQL_cadastro.SQL.Clear;
        IBSQL_cadastro.SQL.Append('SELECT ENT_ID FROM ENTIDADES;');
        IBSQL_cadastro.ExecQuery;
        if IBSQL_cadastro.Eof then
        begin
          entidadeId := 'VALUES (1,'  ;
          table := ');';
        end
        else
        begin
          entidadeId := 'SELECT MAX(ENT_ID)+1,';
          table := ' FROM ENTIDADES;';
        end;
        IBSQL_cadastro.Close;
        IBSQL_cadastro.SQL.Clear;
        IBSQL_cadastro.SQL.Append('insert into ENTIDADES (ENT_ID, CID_ID, TIP_ID, USR_ID, ENT_NOME, ');
        IBSQL_cadastro.SQL.Append('ENT_DTCAD, ENT_TIPO, ENT_RAZAOSOCIAL, ENT_LOGRADOURO, ');
        IBSQL_cadastro.SQL.Append('ENT_BAIRRO, ENT_CEP, ENT_CPF, ENT_CNPJ, ENT_IDENTIDADE, ');
        IBSQL_cadastro.SQL.Append('ENT_EMAIL, ENT_FONE1, ENT_FONE2, ENT_FONE3, ENT_FAX, ');
        IBSQL_cadastro.SQL.Append('ENT_OBS, ENT_LIMITCRED, ENT_PRAZO, ENT_DTNASC) ');
        IBSQL_cadastro.SQL.Append(EntidadeId);
        IBSQL_cadastro.SQL.Append(CB_cli_listCidadeID.Text + ', ');
        IBSQL_cadastro.SQL.Append(CB_cli_listTipoID.Text + ', ');
        IBSQL_cadastro.SQL.Append(FRM_Menu.lb_userID.Caption + ', ''');
        IBSQL_cadastro.SQL.Append(Edit_cliNome.Text + ''', ');
        IBSQL_cadastro.SQL.Append('CAST(''TODAY'' AS DATE), ''C'', ''');
        IBSQL_cadastro.SQL.Append(Edit_cliRazao.Text + ''', ''');
        IBSQL_cadastro.SQL.Append(Edit_cliLog.Text + ''', ''');
        IBSQL_cadastro.SQL.Append(Edit_cliBairro.Text + ''', ''');
        IBSQL_cadastro.SQL.Append(CEP + ''', ''');
        IBSQL_cadastro.SQL.Append(CPF + ''', ''');
        IBSQL_cadastro.SQL.Append(CNPJ + ''', ''');
        IBSQL_cadastro.SQL.Append(Edit_cliRg.Text + ''', ''');
        IBSQL_cadastro.SQL.Append(Edit_cliEmail.Text + ''', ''');
        IBSQL_cadastro.SQL.Append(Fone1 + ''', ''');
        IBSQL_cadastro.SQL.Append(Fone2 + ''', ''');
        IBSQL_cadastro.SQL.Append(Fone3 + ''', ''');
        IBSQL_cadastro.SQL.Append(Fax + ''', ''');
        IBSQL_cadastro.SQL.Append(Memo_client.Text + ''', ');
        IBSQL_cadastro.SQL.Append(Edit_cliLimitCred.Text + ', ');
        IBSQL_cadastro.SQL.Append(Edit_cliPrazo.Text + ', ');
        IBSQL_cadastro.SQL.Append(Nasc);
        IBSQL_cadastro.SQL.Append(Table);
        IBSQL_cadastro.ExecQuery;
        IBSQL_cadastro.Close;
        IBSQL_cadastro.Transaction.Commit;
      except on E: Exception
        do
        begin
          IBSQL_cadastro.Transaction.Rollback;
          MessageDlg('Erro na gravação do novo cliente!!',mtError,[mbOk], 0);
        end;
      end;
    end;
    Version 2 : (j'ai mis que la requête...)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    IBSQL_cadastro.SQL.Append('insert into ENTIDADES (ENT_ID, CID_ID, TIP_ID, USR_ID, ENT_NOME, ');
        IBSQL_cadastro.SQL.Append('ENT_DTCAD, ENT_TIPO, ENT_RAZAOSOCIAL, ENT_LOGRADOURO, ');
        IBSQL_cadastro.SQL.Append('ENT_BAIRRO, ENT_CEP, ENT_CPF, ENT_CNPJ, ENT_IDENTIDADE, ');
        IBSQL_cadastro.SQL.Append('ENT_EMAIL, ENT_FONE1, ENT_FONE2, ENT_FONE3, ENT_FAX, ');
        IBSQL_cadastro.SQL.Append('ENT_OBS, ENT_LIMITCRED, ENT_PRAZO, ENT_DTNASC) ');
        IBSQL_cadastro.SQL.Append(EntidadeId);
        IBSQL_cadastro.SQL.Append(CB_cli_listCidadeID.Text + ', '+CB_cli_listTipoID.Text + ', '+FRM_Menu.lb_userID.Caption + ', '''+Edit_cliNome.Text + ''', '+'CAST(''TODAY'' AS DATE), ''C'', '''+Edit_cliRazao.Text + ''', '''+Edit_cliLog.Text + ''', '''+Edit_cliBairro.Text + ''', '''+CEP + ''', '''+CPF + ''', '''+CNPJ + ''', '''+Edit_cliRg.Text + ''', '''+Edit_cliEmail.Text + ''', '''+Fone1 + ''', '''+Fone2 + ''', '''+Fone3 + ''', '''+Fax + ''', '''+Memo_client.Text + ''', '+Edit_cliLimitCred.Text + ', '+Edit_cliPrazo.Text + ', '+Nasc+Table);
    La première me génère un message d'erreur alors que la seconde fonctionne or elles sont identiques...

    Cyril.

  4. #4
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 902
    Points : 6 026
    Points
    6 026
    Par défaut
    Ce truc me chifonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    IBSQL_cadastro.SQL.Append(Nasc);
        IBSQL_cadastro.SQL.Append(Table);
    car selon moi tu n'as pas la même chose avec la concaténation
    Je me permets aussi ce conseil : utilises la fonction QuotedStr plutôt que de coder des empilements de quotes.....
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Points : 67
    Points
    67
    Par défaut
    Bonjour,

    Dans les 2 cas, j'ai copié la requête dans un Tmemo et voici ce que ça donne :

    Version 1:
    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
     
    insert into ENTIDADES (ENT_ID, CID_ID, TIP_ID, USR_ID, ENT_NOME, 
    ENT_DTCAD, ENT_TIPO, ENT_RAZAOSOCIAL, ENT_LOGRADOURO, 
    ENT_BAIRRO, ENT_CEP, ENT_CPF, ENT_CNPJ, ENT_IDENTIDADE, 
    ENT_EMAIL, ENT_FONE1, ENT_FONE2, ENT_FONE3, ENT_FAX, 
    ENT_OBS, ENT_LIMITCRED, ENT_PRAZO, ENT_DTNASC) 
    SELECT MAX(ENT_ID)+1,
    3164, 
    6, 
    1, '
    TESTE44', 
    CAST('TODAY' AS DATE), 'C', '
    ', '
    ', '
    ', '
    00000-000', '
    000.000.000-00', '
    00.000.000/0000-00', '
    ', '
    ', '
    (00) 0000-0000', '
    (00) 0000-0000', '
    (00) 0000-0000', '
    (00) 0000-0000', '
    ', 
    0.00, 
    0, 
    NULL
     FROM ENTIDADES;
    Version 2:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    insert into ENTIDADES (ENT_ID, CID_ID, TIP_ID, USR_ID, ENT_NOME, 
    ENT_DTCAD, ENT_TIPO, ENT_RAZAOSOCIAL, ENT_LOGRADOURO, 
    ENT_BAIRRO, ENT_CEP, ENT_CPF, ENT_CNPJ, ENT_IDENTIDADE, 
    ENT_EMAIL, ENT_FONE1, ENT_FONE2, ENT_FONE3, ENT_FAX, 
    ENT_OBS, ENT_LIMITCRED, ENT_PRAZO, ENT_DTNASC) 
    SELECT MAX(ENT_ID)+1,
    1343, 5, 1, 'TESTE', CAST('TODAY' AS DATE), 'C', '', '', '', '00000-000', '000.000.000-00', '00.000.000/0000-00', '', '', '(00) 0000-0000', '(00) 0000-0000', '(00) 0000-0000', '(00) 0000-0000', '', 0.00, 0, NULL FROM ENTIDADES;

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Points : 67
    Points
    67
    Par défaut
    Maintenant cela fonctionne et cela a un rapport avec le retour charriot qui doit valoir un caractère car en modifiant ce cette façon :
    Avant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    IBSQL_cadastro.SQL.Append(Edit_cliRazao.Text + ''', ''');
    IBSQL_cadastro.SQL.Append(Edit_cliLog.Text + ''', ''');
    Après :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    IBSQL_cadastro.SQL.Append(''''+Edit_cliRazao.Text + ''', ');
    IBSQL_cadastro.SQL.Append(''''+Edit_cliLog.Text + ''', ');
    La requête évolue ainsi :
    Avant :
    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
     
    insert into ENTIDADES (ENT_ID, CID_ID, TIP_ID, USR_ID, ENT_NOME, 
    ENT_DTCAD, ENT_TIPO, ENT_RAZAOSOCIAL, ENT_LOGRADOURO, 
    ENT_BAIRRO, ENT_CEP, ENT_CPF, ENT_CNPJ, ENT_IDENTIDADE, 
    ENT_EMAIL, ENT_FONE1, ENT_FONE2, ENT_FONE3, ENT_FAX, 
    ENT_OBS, ENT_LIMITCRED, ENT_PRAZO, ENT_DTNASC) 
    SELECT MAX(ENT_ID)+1,
    3164, 
    6, 
    1, '
    TESTE44', 
    CAST('TODAY' AS DATE), 'C', '
    ', '
    ', '
    ', '
    00000-000', '
    000.000.000-00', '
    00.000.000/0000-00', '
    ', '
    ', '
    (00) 0000-0000', '
    (00) 0000-0000', '
    (00) 0000-0000', '
    (00) 0000-0000', '
    ', 
    0.00, 
    0, 
    NULL
     FROM ENTIDADES;
    Après :
    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
     
    insert into ENTIDADES (ENT_ID, CID_ID, TIP_ID, USR_ID, ENT_NOME, 
    ENT_DTCAD, ENT_TIPO, ENT_RAZAOSOCIAL, ENT_LOGRADOURO, 
    ENT_BAIRRO, ENT_CEP, ENT_CPF, ENT_CNPJ, ENT_IDENTIDADE, 
    ENT_EMAIL, ENT_FONE1, ENT_FONE2, ENT_FONE3, ENT_FAX, 
    ENT_OBS, ENT_LIMITCRED, ENT_PRAZO, ENT_DTNASC) 
    SELECT MAX(ENT_ID)+1,
    1484, 
    7, 
    1, 
    'teste12', 
    CAST('TODAY' AS DATE), 'C', 
    '', 
    '', 
    '', 
    '00000-000', 
    '000.000.000-00', 
    '00.000.000/0000-00', 
    '', 
    '', 
    '(00) 0000-0000', 
    '(00) 0000-0000', 
    '(00) 0000-0000', 
    '(00) 0000-0000', 
    '', 
    0.00, 
    0, 
    NULL
     FROM ENTIDADES;
    Mais je pense qu'à présent je vais faire ce qu'à suggérer qi130 et utiliser la fonction QuotedStr afin d'éviter ce genre de bêtises...

    Merci

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Points : 67
    Points
    67
    Par défaut
    Bonjour,

    Il y a un truc qui m'échappe...

    Dans mon code j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CEP := Form_fonctions.FormatFBCep(MskEdt_cliCep.Text);
    ...
    CEP := QuotedStr(CEP);
    IBSQL_cadastro.ParamByName('cep').AsString := CEP;
    Le champ recevant CEP dans mon SGBD est un CHAR(9)
    Le MaxLenght de MskEdt_cliCep = 9.
    CEP contient une chaîne de 9 caractères.

    Jusqu'ici tout va bien sauf qu'à l'exécution de IBSQL_cadastro.ParamByName('cep').AsString := CEP;, j'ai un message d'erreur disant que je veux mettre une chaine de 11 caractères dans une qui ne peut en contenir que 9...

    Bien que CEP contienne à présent 11 caractères (les 2 guillemets simples en plus), comment se peut-il que IBSQL_cadastro.ParamByName('cep').AsString; sache qu'il ne peut recevoir qu'une chaîne de 9 caractères... Un truc de fou, ça !!!

    Cyril

  8. #8
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut,

    Une question ! Est-ce ta fonction FormatFBCep() ajoutes des guillemets (') au texte contenu dans ton Edit MskEdt_cliCep ?

    Si oui, effectivement ta chaîne sera trop longue: 11 caractères au lieu de 9.

    @+

  9. #9
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Points : 67
    Points
    67
    Par défaut
    Bonjour,

    Ma fonction ne rajoute pas de guillemet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CEP := Form_fonctions.FormatFBCep(MskEdt_cliCep.Text); // lenght(CEP) = 9 
    ...
    CEP := QuotedStr(CEP); // lenght(CEP) = 11
    IBSQL_cadastro.ParamByName('cep').AsString := CEP; // l'erreur a lieu ici.

  10. #10
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re,

    Cette ligne est en trop !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      CEP := QuotedStr(CEP); // lenght(CEP) = 11
    Ici les guillemets seront automatiquement intégrés par le AsString.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      IBSQL_cadastro.ParamByName('cep').AsString := CEP;
    @+

  11. #11
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Points : 67
    Points
    67
    Par défaut
    Encore merci,

    Cela fonctionne à présent...

    Juste un petit détail, ma variable "Nasc" contient soit une date (aaaa-mm-jj) soit NULL et le .AsString transforme mon NULL en 'NULL'.
    Pour que cela fonction, j'ai utilisé le .Append mais ce n'est plus homogène...
    On ne peut pas tout avoir...

    Cyril.

  12. #12
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut,

    Transmets ta variable 'Nasc' avec un AsDate.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      IBSQL_cadastro.ParamByName('MonParam').AsDate := Nasc;
    @+

  13. #13
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Points : 67
    Points
    67
    Par défaut
    Salut Claudius40,

    La variable Nasc est du type String alors que IBSQL_cadastro.ParamByName('MonParam').AsDate est du type TdateTime... Je pensais faire StrToDate(Nasc) mais si le paramètre n'est pas une date valide, cela gère une erreur...

    Cyril.

  14. #14
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut,

    Tu peux tester la validité de ta date string avec TryStrToDate.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    var
      dNasc: TDateTime;
    begin
      [...]
      if TryStrToDate(Nasc, dNasc) then
         // OK
         IBSQL_cadastro.ParamByName('MonParam').AsDate := dNasc
      else
        // Date erronée: substituer par la date du jour par exemple !
        IBSQL_cadastro.ParamByName('MonParam').AsDate := Date;
       [...]
    end;
    @+

  15. #15
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Points : 67
    Points
    67
    Par défaut
    Salut,

    Merci pour l'info car je ne connaissais pas la fonction TryStrToDate et elle a l'air bien pratique, surtout si elle vérifie si la date est valide, ce que je vais voir dans 5 minutes...

    Cependant, comme Nasc contient une date de naissance, j'ai 3 cas possible :
    1°) La date est correcte => Nickel comme j'aime
    2°) La date est incorrecte => J'informe que je veux une date correcte sinon rien (c'est comme le Ricard)
    3°) La date n'est pas renseignée donc le champs dans ma table doit contenir NULL. Vu que l'utilisateur n'est pas né de la dernière pluie, il est encore d'aujourd'hui...
    Et c'est justement où ça se gate car...
    Méthode 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Nasc := 'NULL';
    IBSQL_cadastro.ParamByName('MonParam').AsDate := Nasc;
    // Erreur car TdateTime := String
    Méthode 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Nasc := 'NULL';
    IBSQL_cadastro.ParamByName('MonParam').AsDate := StrToDate(Nasc);
    // Erreur car NULL n'est pas une date
    Cyril.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation de MAX dans une requête SQL
    Par Evil onE dans le forum Langage SQL
    Réponses: 7
    Dernier message: 15/06/2004, 18h38
  2. Pb requête imbriquée
    Par ddams dans le forum Requêtes
    Réponses: 11
    Dernier message: 20/04/2004, 12h13
  3. Requete requête sous sybase
    Par eddie dans le forum Sybase
    Réponses: 3
    Dernier message: 02/04/2003, 14h51
  4. Requête imbriquée et indexes INTERBASE
    Par vadim dans le forum InterBase
    Réponses: 2
    Dernier message: 06/09/2002, 16h15
  5. [BDD] Enregistrer le résultat d'une requête
    Par Mowgly dans le forum C++Builder
    Réponses: 5
    Dernier message: 19/06/2002, 15h26

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