Salut à tous
Je stocke dans une base MySQL des courbes de mesures dans un champs BLOB. J'ai farfouillé un peu partout (FAQ, et forum) et j'ai trouvé le moyen d'enregistrer et de relire sauf qu'à la relecture je n'ai que des zéros. Comme ces courbes sont le résultat d'un calcul j'utilise un TMemoryStream au lieu d'un fichier comme c'est le cas dans les exemples.
J'ai fait ce petit code test pour comprendre ce qui ce passe.
La courbe est à priori bien enregistrée dans la base comme le montre ce dump de la table.
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 unit Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, DBCtrls, DB, ADODB; type TForm1 = class(TForm) ADOConnection1: TADOConnection; DataSource1: TDataSource; ADOTable1: TADOTable; DBNavigator1: TDBNavigator; procedure DBNavigator1Click(Sender: TObject; Button: TNavigateBtn); private { Déclarations privées } public { Déclarations publiques } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.DBNavigator1Click(Sender: TObject; Button: TNavigateBtn); var Crb:TMemoryStream; i,l:integer; y:double; LesY:array of double; begin ///Création et enregistrement de la courbe if Button=nbInsert then begin Crb:=TMemoryStream.Create; Crb.SetSize(100*sizeof(double)); for i:= 0 to 99 do begin y:=5*i-12; Crb.Write(y,sizeof(double)); end; (ADOTable1.FieldByName('Courbe') as TBlobField).LoadFromStream(Crb); Crb.Free; end; ///Lecture de la courbe if Button in [nbFirst,nbPrior, nbNext,nbLast] then begin Crb:=TMemoryStream.Create; TBlobField(ADOTable1.FieldByName('Courbe')).SaveToStream(Crb); l:=Crb.Size div sizeof(double); SetLength(LesY,l); Crb.Read(LesY[0],l*sizeof(double)); Crb.Free; end; end; end.
Si l'un de vous a une suggestion ou une idée.
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 -- phpMyAdmin SQL Dump -- version 3.2.4 -- http://www.phpmyadmin.net -- -- Serveur: localhost -- Généré le : Lun 06 Décembre 2010 à 08:48 -- Version du serveur: 5.1.41 -- Version de PHP: 5.3.1 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; -- -- Base de données: `bdd_presim` -- -- -------------------------------------------------------- -- -- Structure de la table `t_test` -- CREATE TABLE IF NOT EXISTS `t_test` ( `Ref` int(11) unsigned NOT NULL AUTO_INCREMENT, `Courbe` blob NOT NULL, PRIMARY KEY (`Ref`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ; -- -- Contenu de la table `t_test` -- INSERT INTO `t_test` (`Ref`, `Courbe`) VALUES (1, 0x00000000000028c00000000000001cc000000000000000c....); /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
Partager