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 :

Delphi XE2 avec SQL Server 2005


Sujet :

Bases de données Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 15
    Points : 6
    Points
    6
    Par défaut Delphi XE2 avec SQL Server 2005
    Bonjour ou Bonsoir

    Environnement : Delphi XE2, SQL Server 2005. pour se connecter à SQL Server 2005, j'utilise ODBC avec SQL Server native Client 10.0

    Je fais face à un sérieux problème de puis que nous avons acheter Delphi XE2. Je n'arrive pas à exécuter depuis Delphi XE2 une Procédure stockée avec passage de paramètres de type TDateTime. J'ai le message :"Invalid date format" (format de date invalide)

    Voici une exemple de code :

    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
    function VerifieSiDossierSoldeOuPas(NumeroDossier : string; Periode : TDateTime) : Boolean; 
    begin 
    with DataVisClient do begin 
    with Proc_VerifieSiDossierSoldeOuPas do begin 
    Prepared := True; 
    try 
    ParamByName('@NumeroDossier').AsString := NumeroDossier; 
    ParamByName('@Periode').AsDateTime := Periode; 
    ParamByName('@DossierNonSolde').AsBoolean := True; 
     
    if not Prepared then 
    Prepare; 
     
    ExecProc; 
     
    Result := ParamByName('@DossierNonSolde').AsBoolean; 
    except 
    on E:Exception do 
    begin 
    MessageBeep(0); 
    MessageDlg(E.Message, mtError, [mbAbort], 0); 
    Exit; 
    end; 
    end; 
    end; 
    end; 
    end;
    Voici la procédure stockée sous SQL Server 2005


    Code sql : 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
    USE [PORTEFEUILLE_COMPTA] 
    GO 
    /****** Objet : StoredProcedure [dbo].[VerifieSiDossierNonSolde;1] Date de génération du script : 04/18/2012 18:10:50 ******/ 
    SET ANSI_NULLS OFF 
    GO 
    SET QUOTED_IDENTIFIER OFF 
    GO 
    ALTER PROCEDURE [dbo].[VerifieSiDossierNonSolde;1] 
    ( 
    @NumeroDossier varchar(8), 
    @Periode datetime, 
    @DossierNonSolde bit OUTPUT 
    ) 
     
    AS 
     
    -- Recherche des comptes clients non Soldés 
     
    -- 326. 316. 345. définitive 
     
    --DROP TABLE A2 
     
     
    SELECT RIGHT(Cpt,7) As Dossier, Cpt, SUM(Debit)-SUM(Credit) As Montant 
    INTO #COMPTESOLDE 
    FROM ECR_DEF 
    WHERE ((Cpt LIKE '326.%'+@NumeroDossier) OR (Cpt LIKE '316.%'+@NumeroDossier) OR (Cpt LIKE '345.%'+@NumeroDossier) OR (Cpt LIKE '341.%'+@NumeroDossier) OR (Cpt LIKE '384.%'+@NumeroDossier) OR (Cpt LIKE '336.%'+@NumeroDossier)) AND 
    Moi <= @Periode 
    GROUP BY Cpt 
     
    UNION ALL 
     
    -- 326. 316. 345. provisoire 
     
    SELECT RIGHT(Cpt,7) As Dossier, Cpt, SUM(Debit)-SUM(Credit) As Montant 
    FROM ECR_PROV 
    WHERE ((Cpt LIKE '326.%'+@NumeroDossier) OR (Cpt LIKE '316.%'+@NumeroDossier) OR (Cpt LIKE '345.%'+@NumeroDossier) OR (Cpt LIKE '341.%'+@NumeroDossier) OR (Cpt LIKE '384.%'+@NumeroDossier) OR (Cpt LIKE '336.%'+@NumeroDossier)) AND 
    Moi <= @Periode 
    GROUP BY Cpt 
    IF (@@ERROR <> 0) 
    BEGIN 
    RETURN 
    END 
     
    SELECT Dossier, SUM(Montant) AS Montant 
    INTO #CPTSOLDE 
    FROM #COMPTESOLDE 
    GROUP BY Dossier 
     
    DROP TABLE #COMPTESOLDE 
     
     
    DELETE FROM #CPTSOLDE 
    WHERE Montant <= 0 
     
     
    IF EXISTS (SELECT Dossier 
    FROM #CPTSOLDE 
    WHERE Dossier = @NumeroDossier) 
     
    SET @DossierNonSolde = 1 
    ELSE 
    SET @DossierNonSolde = 0 
    RETURN 0

    Lorsque j'appelle la fonction "VerifieSiDossierSoldeOuPas", j'ai le message d'erreur <<Invalid Date format>>

    Quelqu'un peut il m'aider ?
    fonkoufobar

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut

    3.5. Les balises Code
    4.4. Style sobre

    Quelle la couche objet DB ? BDE ou ADO ? les deux pouvant utiliser de l'ODBC !

    Comme c'est un problème de Data, as-tu pensé à réduire le code Delphi et le code SQL avec juste @Periode comme paramètre en un petit Where, pour mieux isoler le problème ?
    Moi c'est le champ Date ??? drôle de nom !
    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
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 15
    Points : 6
    Points
    6
    Par défaut Merci ShaiLeTroll
    Bonjour ou bonsoir ShaiLeTroll

    Ma couche objet est le BDE.
    J'ai essayé de réduire le code Delphi et SQL comme vous m'avez suggéré. Et là, le message d'erreur a disparu !!!!!

    Ensuite j'ai remis les mêmes paramètres mais en changeant l'ordre de sorte que le paramètre @Periode qui représente une date vienne en premier lieu, et les autres paramètres après. Le message a aussi disparu. Mais dès que je mets un paramètre avant le paramètre @Periode, alors le message d'erreur refait surface.

    Qu'est ce qui peut bien expliquer cela ?

    Sinon, merci déjà pour m'avoir permis de constater cela

  4. #4
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,

    Le BDE est déprécié et donc figé depuis 2002, soit 10 ans. Plus de détails ICI
    S'il est toujours fourni avec XE2, ce n'est que par souci de compatibilité avec de "vieilles" applications.
    Persister à l'utiliser de nos jours revient AMHA à vouloir se tirer une balle dans le pied !
    Pour information, je me suis amusé à reprendre votre exemple avec XE2 et SqlServer 2008 avec accès BDE et ODBC et le résultat est identique et sans appel pour un paramètre TDateTime...

    Il vous reste 2 solutions :
    1. Ne pas utiliser le type TDateTime et le remplacer par un String côté Delphi, modifier le type du paramètre correspondant côté SqlServer en Varchar et le transtyper (CAST) pour les requêtes où il est utile.
    2. Remplacer BDE/ODBC par ADO ou dbExpress car à mon avis d'autres problèmes de ce type vont surgir à un moment ou un autre...

    Sans compter les problèmes de déploiement, d'administration et de performances avec le BDE...
    --
    Philippe.
    Philippe.

  5. #5
    Futur Membre du Club
    Inscrit en
    Février 2004
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 15
    Points : 6
    Points
    6
    Par défaut
    Bonjour Ph. B.

    Merci pour la contribution que vous avez apporté pour m'aider à résoudre mon problème.

    Je vais essayer de faire comme vous m'avez suggéré et dans un deuxième temps, je convertirai mes applications de BDE vers dbExpress.

    Merci encore

Discussions similaires

  1. Synchronisation des Données avec SQL Server 2005
    Par attouchi dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 03/07/2006, 16h14
  2. planifier une sauvegarde avec sql server 2005
    Par morados dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 15/06/2006, 14h09
  3. [VS] Remote connection avec SQL Server 2005 Express
    Par L`artiste dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/05/2006, 22h28
  4. Cube OLAP local avec SQL Server 2005 ??
    Par atom.hic dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 31/03/2006, 16h27
  5. [SQL-Server] Je n'arrive pas à faire tourner php avec Sql server (2005)
    Par bluecurve dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/03/2006, 18h50

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