|
Windev +SQLite3 +blob |
|
Utilisateur WDF ![](http://old.wdforge.org/uploads/rank3e8415a3a23ef.gif)
Inscrit: 06/12/2004 14:35
Post(s): 69
|
Bonjour,
Je souhaite ecrire un programme utilisant une base de données au format SQLite3. Tout fonctionne impeccablement, sauf pour ma table qui contient un champ de type blob.
Comment faire sous windev pour insérer une image dans ce champ puis récupérer la valeur de ce blob pour afficher l'image directement dans un champ image ou pour ecrire un fichier jpg par exemple ?
merci d'avance pour votre aide sur la programmation windev avec SQLite !
cordialement, JS.
Contribution le : 19/02/2008 17:41
|
|
|
Re: Windev +SQLite3 +blob |
|
DSI WDF
Inscrit: 05/05/2004 13:46
Post(s): 314
|
Bonjour,
Sans avoir essayé, je vous conseillerai les fonctions de type Mémo (HAttacheMemo...)
Contribution le : 20/02/2008 17:12
|
|
|
Re: Windev +SQLite3 +blob |
|
Utilisateur WDF ![](http://old.wdforge.org/uploads/rank3e8415a3a23ef.gif)
Inscrit: 06/12/2004 14:35
Post(s): 69
|
désolé mais j'utilise les fonctions sql (sqlexec, sqlcol...)
Contribution le : 20/02/2008 17:29
|
|
|
Re: Windev +SQLite3 +blob |
|
Animateur WDF ![](http://old.wdforge.org/uploads/rank3f7d78368d45f.gif)
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Bonjour, //Lecture
HExtraitMemo(SQLLitMemo("Req1", 1), "Produit.BMP")
//ou
HExtraitMemo(SQLLitMemoTexte("Req1", 1), "Texte.RTF")
Contribution le : 20/02/2008 20:02
|
|
|
Re: Windev +SQLite3 +blob |
|
Utilisateur WDF ![](http://old.wdforge.org/uploads/rank3e8415a3a23ef.gif)
Inscrit: 06/12/2004 14:35
Post(s): 69
|
Désolé drcharly mais cela ne fonctionne pas (enfin à moitié) Windev ne plante pas sur cette instruction : HExtraitMemo(SQLLitMemo("Req1", 1), "test.jpg") Mais l'image n'est pas visible. En effet, pour pouvoir faire un INSERT dans un champ blob d'une base sqlite3 on est obligé de faire un remplacement de caracteres : "'" par "''" et caract(0) par "\000". Une idée ? Personne n'utilise windev avec des base SQLite sur ce forum ??? ![](http://old.wdforge.org/uploads/icon_frown.gif) Merci d'avance.
Contribution le : 21/02/2008 10:52
|
|
|
Re: Windev +SQLite3 +blob |
|
Animateur WDF ![](http://old.wdforge.org/uploads/rank3f7d78368d45f.gif)
Inscrit: 02/03/2003 04:07
De Noisy le grand(93)
Post(s): 2745
|
Bonjur, Pourquoi ne pas utiliser les acces alter-natif de SQLManagerX qui gère l'accès natif à SQLite 3.2.0 Je vous propose de lire la page suivante.
Contribution le : 21/02/2008 13:48
|
|
|
Re: Windev +SQLite3 +blob |
|
Utilisateur WDF ![](http://old.wdforge.org/uploads/rank3e8415a3a23ef.gif)
Inscrit: 06/12/2004 14:35
Post(s): 69
|
J'ai deja essayé, merci drcharly, mais les inserts puis select sur les blob n'ont pas l'air de fonctionner non plus... ![](http://old.wdforge.org/uploads/icon_frown.gif)
Contribution le : 21/02/2008 15:00
|
|
|
Re: Windev +SQLite3 +blob |
|
Utilisateur WDF ![](http://old.wdforge.org/uploads/rank3e8415a3a23ef.gif)
Inscrit: 06/12/2004 14:35
Post(s): 69
|
A croire que personne n'utilise de base de données avec des champs blob !! ![](http://old.wdforge.org/uploads/icon_frown.gif)
Contribution le : 22/02/2008 09:38
|
|
|
Re: Windev +SQLite3 +blob |
|
Stagiaire WDF ![](http://old.wdforge.org/uploads/rank3e84154a75422.gif)
Inscrit: 14/12/2006 10:56
Post(s): 29
|
Bonjour, sous SQLite4wd : INSERT il faut envoyer le contenu du fichier image dans l'insert comme n'importe quelle colonne :
MonFichier est une chaine = fchargeTexte("c:\image.jpg")
requete est une chaine
requete = "INSERT INTO MATABLE (ID,MONBLOB) VALUES (1,"+Monacces:MySQLEscapeString(Monfichier)+")"
Monacces:mySQLExec(requete,1)
Monacces:MySQLFerme(1)
LECTURE il faut lire la colonne avec un select et utiliser mySQLLitMemo
requete est une chaine = "SELECT ID,MONBLOB FROM MATABLE"
si monacces:MySQLExec(requete,1)
monacces:mysqlpremier(1)
si pas monacces:mysqlendehors alors
monacces:mySQLLitMemo(1,2,"NomduChampImageFenetreWindev")
fin
fin
monacces:MySQLFerme(1)
Bon dev @+
Contribution le : 22/02/2008 13:48
|
|
|
Re: Windev +SQLite3 +blob |
|
Utilisateur WDF ![](http://old.wdforge.org/uploads/rank3e8415a3a23ef.gif)
Inscrit: 06/12/2004 14:35
Post(s): 69
|
Désolé mais cela ne fonctionne toujours pas. voici mon code:
v_retCode = SQLite4WD:mySQLConnecte(fRepExe()+"\essai.dvd")
v_retCode = SQLite4WD:mySQLExec("create table test (ID INTEGER , MONBLOB BLOB)",0)
SQLite4WD:mySQLFerme(0)
MonFichier est une chaîne = fChargeTexte("D:\Privé\Windev\MyDvdTek\Exe\cat_logo.JPG")
requete est une chaîne
requete = "INSERT INTO test (ID,MONBLOB) VALUES (1,"+SQLite4WD:mySQLEscapeString(MonFichier)+")"
SQLite4WD:mySQLExec(requete,1)
SQLite4WD:mySQLFerme(1)
requete = "SELECT ID,MONBLOB FROM test"
SI SQLite4WD:mySQLExec(requete,1)
SQLite4WD:mySQLPremier(1)
SI PAS SQLite4WD:mySQLEnDehors ALORS
SQLite4WD:mySQLLitMemo(1,2,"img_blob")
FIN
FIN
SQLite4WD:mySQLFerme(1)
==> l'image ne s'affiche dans le champ image qui s'appelle img_blob, de plus j'ai l'erreur suivante: Erreur à la ligne 17 du traitement Méthode mySQLLitMemo. La propriété 'Type' est interdite sur une variable de type 'chaîne'. Merci d'avance pour vos solutions.
Contribution le : 22/02/2008 14:10
|
|
|
Re: Windev +SQLite3 +blob |
|
Stagiaire WDF ![](http://old.wdforge.org/uploads/rank3e84154a75422.gif)
Inscrit: 14/12/2006 10:56
Post(s): 29
|
SQLite4WD:mySQLLitMemo(1,2,img_blob)
devrait mieu fonctionner on veut le champs et non le nom du champs sinon la ligne plante avec l'erreur que vous avez eue
Contribution le : 22/02/2008 14:21
|
|
|
Re: Windev +SQLite3 +blob |
|
Utilisateur WDF ![](http://old.wdforge.org/uploads/rank3e8415a3a23ef.gif)
Inscrit: 15/09/2006 17:34
Post(s): 77
|
Bonjour, je n'ai pas testé, mais en remplaçant
SQLite4WD:mySQLLitMemo(1,2,"img_blob")
par
SQLite4WD:mySQLLitMemo(1,2,img_blob)
cela passe peut être?
Contribution le : 22/02/2008 14:21
|
|
|
Re: Windev +SQLite3 +blob |
|
Utilisateur WDF ![](http://old.wdforge.org/uploads/rank3e8415a3a23ef.gif)
Inscrit: 06/12/2004 14:35
Post(s): 69
|
Exact mais cela ne fonctionne toujours pas. En effet, quand je suis en mode pas à pas, le parametre filedname dans la méthode mySQLLitMemo est égale à "rien". L'image ne s'affiche toujours pas dans le champ img_blob.
Attacher un fichier:
2008-02-22_143019.jpg (125.80 KB)![784_47becee943430.jpg 1066X847 px](http://old.wdforge.org/uploads/newbb/784_47becee943430.jpg)
Contribution le : 22/02/2008 14:32
|
|
|
Re: Windev +SQLite3 +blob |
|
Stagiaire WDF ![](http://old.wdforge.org/uploads/rank3e84154a75422.gif)
Inscrit: 14/12/2006 10:56
Post(s): 29
|
changer la fonction mySQLLitmemo dans la classe comme cela en fait la methode a un bug mais comme j'utilise SQLManagerX le bug n'apparait pas pour la classe car le code est renvoyer avant
PROCEDURE mySQLLitMemo(requestNumber, numField, fieldName)
LOCAL
fileName is string
myRequestNumber is int
myNumField is unsigned int
v_blob est une chaîne
myNumField = numField - 1
myRequestNumber = requestNumber
fileName = fFichierTemp("BIN")
IF (SansEspace(fileName) <> "") THEN
AppelDLL32(:NomDLL,"_SQLiteLitMemo", myRequestNumber, myNumField, fileName)
v_blob =:mySQLEscapeString(fChargeTexte(fileName),False)
v_blob = Remplace(v_blob,Caract(13)+Caract(10),Caract(10))
fSauveTexte(fileName,v_blob)
SI fieldName = "" ALORS RENVOYER fChargeTexte(fileName)
SWITCH ({fieldName}..Type)
CASE typBarreOutils, typBouton, typOnglet, typOptionMenu, typJauge, typPotentiomètre, typPotentiomètreRotatif
{fieldName}..Image = fileName
OTHER CASE
{fieldName} = fileName
END
fSupprime(fileName)
END
j'ai fait les test je versionnerais la classe SQLite4WD
Contribution le : 22/02/2008 15:09
|
|
|
[Résolu] Re: Windev +SQLite3 +blob |
|
Utilisateur WDF ![](http://old.wdforge.org/uploads/rank3e8415a3a23ef.gif)
Inscrit: 06/12/2004 14:35
Post(s): 69
|
Cela fonctionne enfin merci beaucoup ! changement effectuée en plus de la correction de la méthode: Code :
SI PAS SQLite4WD:mySQLEnDehors ALORS SQLite4WD:mySQLLitMemo(1,2,"img_blob")
Il faut bien passer le champ image en tant que chaine. merci !
Contribution le : 22/02/2008 15:21
|
|
|
Re: Windev +SQLite3 +blob |
|
Stagiaire WDF ![](http://old.wdforge.org/uploads/rank3e84154a75422.gif)
Inscrit: 14/12/2006 10:56
Post(s): 29
|
oui maintenant oui puisque c'est fait par l'indirection donc c'est une chaine contenant le nom du champs
Contribution le : 22/02/2008 15:25
|
|
Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.
|
Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
|