Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблемка, посоветуйте плиз (двоичные данные) [D6, MSSQL]


неважно ©   (2003-10-22 17:23:00) 

В общем нужно мне хранить в МС СКЛ данные полученные с модема, т.е. бинарные. в принципе 500 байт хватит.
я сделал в таблице поле varbinary(500). Как понимаю надо работать с этими полями как Blob ? Пробую по разному, не получается, сейчас останавился на :
передаю в хранимую процедуру
with ADOStoredProc do
Begin
ProcedureName:="PR_INSJOB";
Parameters.Clear;
Parameters.CreateParameter("BUF",ftBlob,pdInput,500,null);
S:=TMemoryStream.Create;
S.Clear;
S.SetSize(len);
S.Write(BUF,len);
// Parameters.ParamByName("BUF").LoadFromStream(S,ftBlob);
Parameters.ParamByName("BUF").LoadFromFile("debug.txt",ftBlob);
S.SaveToFile("debug.txt");
Parameters.CreateParameter("LENBUF",ftInteger,pdInput,100,null);
Parameters.ParamValues["LENBUF"]:=len;
Prepared:=true;
ExecProc;

У меня в результате в таблицу пишется только 1 байт, хотя в файл пишется весь буфер :(

2) Как потом считать ?
пробую через TBlobField ошибку выдаёт.

Кстати работаю через АДО.

Подскажите плиз как лучше сделать.


Polevi   (2003-10-23 10:20:00) [1]

BinToHex - и сохраняй в Varchar поле


ZrenBy   (2003-10-23 09:40:00) [2]


var wS : WideString;
V,V2 : Variant;
i : Integer;
S : String;
begin
V := VarArrayCreate([0,499],varByte);
for i := 0 to 499 do V[i] := i mod 255;
S := "0x";
for i := 0 to 499 do S := S+ IntToHex(V[i],2);

wS := "insert into TBL_B (ID,B500)values(1,"+S+")";

ADOCommand1.CommandText := wS;
ADOCommand1.Execute;

V2 := VarArrayCreate([0,25],varByte);
for i := 0 to 25 do V2[i] := i mod 255;
S := "0x";
for i := 0 to 25 do S := S+ IntToHex(V2[i],2);

wS := "insert into TBL_B (ID,B500)values(2,"+S+")";

ADOCommand1.CommandText := wS;
ADOCommand1.Execute;
end;

procedure TForm1.Button3Click(Sender: TObject);
var V:Variant; S:String; i:Integer;
begin
ADODataSet1.CommandText := "select * from TBL_B where ID=1";
ADODataSet1.Open;
V := ADODataSet1.Fields[1].Value;
ADODataSet1.Close;
S := "0x";
for i := 0 to (VarArrayHighBound(V,1)) do S := S+ IntToHex(V[i],2);
Memo1.Lines.Text := S;

ADODataSet1.CommandText := "select * from TBL_B where ID=2";
ADODataSet1.Open;
V := ADODataSet1.Fields[1].Value;
ADODataSet1.Close;
S := "0x";
for i := 0 to (VarArrayHighBound(V,1)) do S := S+ IntToHex(V[i],2);
Memo2.Lines.Text := S;
end;


оченьважно   (2003-10-22 19:08:00) [3]

Удалено модератором
Примечание: А ты тут причем?


оченьважно   (2003-10-22 17:45:00) [4]

Удалено модератором
Примечание: А ты тут причем?


ZrenBy   (2003-10-22 17:37:00) [5]

Попробуй так

var V:Variant;
V := VarArrayCreate([0,499],varByte);

ADO.Parameters.CreateParameter("@V",ftBytes,pdInput,500, V);

Во всяком случае я с binary(8) именно так работаю


оченьважно   (2003-10-22 17:37:00) [6]

Удалено модератором
Примечание: А ты тут причем?


ZrenBy   (2003-10-22 17:36:00) [7]

Попробуй так

var V:Variant;
V := VarArrayCreate([0,499],varByte);

ADO.Parameters.CreateParameter("@V",ftBytes,pdInput,500, V);

Во всяком случае я с binary(8) именно так работаю


Митяй   (2003-10-22 17:32:00) [8]

"Котёнка с таким именем, во дворе ждут одни неприятности."
Г-ну Неважно.
С уважением, Митяй!


Наверх

Титульная страница Поиск, карта сайта Написать письмо