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 :

MSSQL Server DELPHI7 Enregistrer BLOB Memo


Sujet :

Bases de données Delphi

  1. #1
    Nouveau membre du Club
    Profil pro
    Responsable maintenance
    Inscrit en
    Juin 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable maintenance

    Informations forums :
    Inscription : Juin 2003
    Messages : 26
    Points : 29
    Points
    29
    Par défaut MSSQL Server DELPHI7 Enregistrer BLOB Memo
    Bonjour

    MSSQL Server DELPHI7 Comment enregistrer BLOB Memo

    MSSQL Server 2008 DELPHI7 Windows XP SP3

    Composants utilisés : ADOConnection1 ADOQuery1 DataSource1 DBGrid1 DBMemo1

    La base et la table ont été créées avec SQL Server 2008 Management Studio
    Liste des champs : dans le fichier joint Définition table base.doc

    La clé primaire ID de type integer est autoincrémentée
    Le champ memo est déclaré en varchar(MAX) pour faire face à des tailles importantes
    Le champ memo y est saisi avec une seule ligne de texte

    1)
    L'application delphi montre bien dans la DBGrid les enregistrements réalisés avec MS SQL Management Studio. Le DBMemo montre la 1ère ligne du Mémo associé à l'enregistrement.

    2)
    L'application delphi insère sans problèmes de nouveaux enregistrements (string et integer).
    Le memo est détecté en ftMemo sur demande du type de données de sa colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    ChnNom:=DbGrid1.Columns.Items[NoColonne].DisplayName;  // Nom de la colonne = nom du champ
    TypeDeChamp:=GetFieldType(DbGrid1,ChnNom);     // type du champ : string, integer ....
     
     
    ADOQuery1.Active:=false;
    //Valeurs affectées : (le champ autoincrémenté est volontairement absent)
    Chn:='INSERT INTO BTCM (DateDuTest,TypeDEquipement,NoDeSerie,Resultat,Bilan,NoOF,DateDeFabrication,Client,FichierDesMesures)  
    VALUES(DEFAULT,'BTCM','212',DEFAULT,'HS','999888','OCT 13','BUS','KIKI')'
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add(Chn);
    ADOQuery1.ExecSQL;
    3)Le problème (après avoir consulté FAQ et Net)
    Comment enregistrer un memo de texte à partir d'un fichier texte ou d'un Memo créé sur la fiche en utilisant un ADOQuery ?

    Le Memo Resultat doit-il être mis en paramètres par :Resultat
    VALUES(DEFAULT,'BTCM','212',:Resultat,'HS','999888','OCT 13','BUS','KIKI')'

    et quelque chose du type : ADOQuery1.Parameters.ParamByName('Resultat').LoadFromFile(OpenDialog1.Filename,ftMemo);
    Mais où placer cette ligne de code
    Faut-il définir le nom du paramètre ou de tous les paramètres à la conception ? Peut-on le faire à l'exécution ?
    Y a t-il une méthode plus simple ?

    4)Si le mémo a eté enregistré entièrement, apparaît-il directement dans le DBMemo lors d'une opération SELECT FROM

    Merci
    Fichiers attachés Fichiers attachés

  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
    vite fait je mettrais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('INSERT INTO BTCM (DateDuTest, TypeDEquipement, NoDeSerie, Resultat,   Bilan,  NoOF,      DateDeFabrication,Client,  FichierDesMesures)');
    ADOQuery1.SQL.Add('           VALUES(DEFAULT,    ''BTCM'',        ''212'',   :pResultat, ''HS'',''999888'', ''OCT 13'',       ''BUS'', ''KIKI'')');
    ADOQuery1.Parameters.ParamByName('pResultat').LoadFromFile(OpenDialog1.Filename, ftMemo);
     
    ADOQuery1.ExecSQL;
    Tu n'avais pas grand chose à finir !

    je te conseille TOUT METTRE en paramètre, évite les trucs à coup de '''' !
    tu notes à quel point il difficile de retrouver les valeurs associées

    Alors un code bien plus long mais plus bien lisible
    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
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add('INSERT INTO BTCM (DateDuTest,TypeDEquipement,NoDeSerie,Resultat,Bilan,NoOF,DateDeFabrication,Client,FichierDesMesures');
    ADOQuery1.SQL.Add('VALUES(DEFAULT,:pTypeDEquipement,:pNoDeSerie,:pResultat,:pBilan,:pNoOF,:pDateDeFabrication,:pClient,:pFichierDesMesures')    
     
     
    ADOQuery1.Parameters.ParamByName('pTypeDEquipement').AsString := 'BTCM';
    ADOQuery1.Parameters.ParamByName('pNoDeSerie').AsString := '212';
    ADOQuery1.Parameters.ParamByName('pBilan').AsString := 'HS';
    ADOQuery1.Parameters.ParamByName('pNoOF').AsString := '999888';
    ADOQuery1.Parameters.ParamByName('pDateDeFabrication').AsString := 'OCT 13';
    ADOQuery1.Parameters.ParamByName('pClient').AsString := 'BUS';
    ADOQuery1.Parameters.ParamByName('pFichierDesMesures').AsString := 'KIKI';
    ADOQuery1.Parameters.ParamByName('pResultat').LoadFromFile(OpenDialog1.Filename, ftMemo);
     
     
    ADOQuery1.ExecSQL;
    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
    Nouveau membre du Club
    Profil pro
    Responsable maintenance
    Inscrit en
    Juin 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable maintenance

    Informations forums :
    Inscription : Juin 2003
    Messages : 26
    Points : 29
    Points
    29
    Par défaut Enregistrement par paramètres
    Merci pour ta réponse rapide. C'est bon pour l'enregistrement du mémo mais ça coince pour l'enregistrement par paramètres.

    Ca fonctionne bien avec le 1er code qui enregistre le memo.
    Une question : d'où vient le "p" devant le champ Resultat ? Pourquoi le ":" ne suffit pas à définir le paramètre ?


    Quant au second code le compilateur indique que AsString est non déclaré. Effectivement en tapant la ligne à la main, l'aide à la construction propose:
    ADOQuery1.Parameters.ParamByName(s:widestring).xxx où xxx ne peut pas être une string. Par contre le LoadFromFile du 1er code est bien proposé.
    Là je sèche.

  4. #4
    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
    Citation Envoyé par PREUX Voir le message
    Ca fonctionne bien avec le 1er code qui enregistre le memo.
    Une question : d'où vient le "p" devant le champ Resultat ? Pourquoi le ":" ne suffit pas à définir le paramètre ?
    Il vient du faire que j'aime mettre un p pour dire que c'est un paramètre, une simple habitude !

    En ADO c'est peut-être Value et DataType

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    ADOQuery1.Parameters.ParamByName('pTypeDEquipement').Value:= 'BTCM';
    ADOQuery1.Parameters.ParamByName('pNoDeSerie').Value:= '212';
    ADOQuery1.Parameters.ParamByName('pBilan').Value:= 'HS';
    ADOQuery1.Parameters.ParamByName('pNoOF').Value:= '999888';
    ADOQuery1.Parameters.ParamByName('pDateDeFabrication').Value:= 'OCT 13';
    ADOQuery1.Parameters.ParamByName('pClient').Value:= 'BUS';
    ADOQuery1.Parameters.ParamByName('pFichierDesMesures').Value:= 'KIKI';
    ADOQuery1.Parameters.ParamByName('pResultat').LoadFromFile(OpenDialog1.Filename, ftMemo);
    Si il n'est pas content surtout pour la valeur Null, il faut forcer le type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ADOQuery1.Parameters.ParamByName('pTypeDEquipement').DataType:= ftString;
    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

  5. #5
    Nouveau membre du Club
    Profil pro
    Responsable maintenance
    Inscrit en
    Juin 2003
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable maintenance

    Informations forums :
    Inscription : Juin 2003
    Messages : 26
    Points : 29
    Points
    29
    Par défaut MSSQL Server DELPHI7 Comment enregistrer BLOB Memo
    Merci Tout fonctionne

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/10/2013, 16h04
  2. MSSQL Server 2008 Express et Delphi7
    Par PREUX dans le forum Bases de données
    Réponses: 3
    Dernier message: 01/10/2013, 16h13
  3. delphi et MSSQL-Server
    Par skandaji dans le forum Bases de données
    Réponses: 3
    Dernier message: 03/05/2006, 12h10
  4. MSSQL server 2003 sous Win 2000
    Par didiergm dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 14/08/2005, 15h19
  5. [Oracle 10g]Problème pour enregistrer blob
    Par Invité dans le forum Hibernate
    Réponses: 6
    Dernier message: 27/04/2005, 11h45

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