![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемка, посоветуйте плиз (двоичные данные) [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]
"Котёнка с таким именем, во дворе ждут одни неприятности."
Г-ну Неважно.
С уважением, Митяй!