Windev +SQLite3 +blob
Utilisateur WDF
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
Créer un fichier PDF de la contribution Imprimer


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
Créer un fichier PDF de la contribution Imprimer


Re: Windev +SQLite3 +blob
Utilisateur WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: Windev +SQLite3 +blob
Animateur WDF
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
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Windev +SQLite3 +blob
Utilisateur WDF
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 ???

Merci d'avance.

Contribution le : 21/02/2008 10:52
Créer un fichier PDF de la contribution Imprimer


Re: Windev +SQLite3 +blob
Animateur WDF
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
_________________
@A+
Contact (privé)......
email : drcharly@wdforge.org
[DrCharly93]
Créer un fichier PDF de la contribution Imprimer


Re: Windev +SQLite3 +blob
Utilisateur WDF
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...

Contribution le : 21/02/2008 15:00
Créer un fichier PDF de la contribution Imprimer


Re: Windev +SQLite3 +blob
Utilisateur WDF
Inscrit:
06/12/2004 14:35
Post(s): 69
A croire que personne n'utilise de base de données avec des champs blob !!

Contribution le : 22/02/2008 09:38
Créer un fichier PDF de la contribution Imprimer


Re: Windev +SQLite3 +blob
Stagiaire WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: Windev +SQLite3 +blob
Utilisateur WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: Windev +SQLite3 +blob
Stagiaire WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: Windev +SQLite3 +blob
Utilisateur WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: Windev +SQLite3 +blob
Utilisateur WDF
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:



jpg  2008-02-22_143019.jpg (125.80 KB)
784_47becee943430.jpg 1066X847 px

Contribution le : 22/02/2008 14:32
Créer un fichier PDF de la contribution Imprimer


Re: Windev +SQLite3 +blob
Stagiaire WDF
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
Créer un fichier PDF de la contribution Imprimer


[Résolu] Re: Windev +SQLite3 +blob
Utilisateur WDF
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
Créer un fichier PDF de la contribution Imprimer


Re: Windev +SQLite3 +blob
Stagiaire WDF
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
Créer un fichier PDF de la contribution Imprimer



 Haut   Précédent   Suivant




Enregistrer votre réponse
CompteNom   Mot de passe   Authentification
Message:


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.

[Recherche avancée]


Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
Visualiser tous les Partenaires...
WinDev, WebDev, WinDev Mobile et HyperFile sont des marques déposées par PCSoft. |  Voter |  Legal |  Contact |   XOOPS 2.0.13.2