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

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

Запись файла в поле типа Image [D7, MSSQL]


Skipidar ©   (2004-01-10 05:51:00) 

Здравствуйте! Не могли бы вы подсказать, как в поле типа Image базы MSSQL записать содержимое файла, используя TADOQuery?
Заранее благодарен.


Skipidar   (2004-01-11 00:37:00) [1]

А всё-таки как?
У себя в приложении я использовал такой вариант:


DM.ADOQuery1.SQL.Text := "INSERT Files VALUES(" + IntToStr(File_ID) + ", " +
IntToStr(Num_L) + ", NULL, " + IntToStr(SearchRec.Size) +
", " + IntToStr(File_Type) + ", """ + EditTitle.Text +
""", """ + Memo1.Text + """, """ + Str + """, """ +
EditHyperlink.Text + """)";
DM.ADOQuery1.ExecSQL;

DM.ADOQuery1.SQL.Text := "UPDATE Files"#13 +
"SET Body = NULL"#13 +
"WHERE ID = " + IntToStr(File_ID);
DM.ADOQuery1.ExecSQL;

DM.ADOQuery1.SQL.Text := "EXEC sp_dboption ""NSD"", ""select into/bulkcopy"", ""true""";
DM.ADOQuery1.ExecSQL;

f := TFileStream.Create(OpenDialog1.FileName, fmOpenRead);

repeat
Readed := f.Read(a, 500);
BinToHex(@a, @S1, Readed);
S := S + S1;
if (Length(S) >= 65000) or (f.Position = f.Size) then begin
if Readed < 500 then
SetLength(S, Length(S) - 1000 + Readed*2);
//end if
DM.ADOQuery1.SQL.Text := "DECLARE @ptrval binary(16)"#13 +
"SELECT @ptrval = TEXTPTR(Body)"#13 +
"FROM Files"#13 +
"WHERE Files.ID = " + IntToStr(File_ID) + #13 +
"UPDATETEXT Files.Body @ptrval NULL 0 0x" + S;
DM.ADOQuery1.ExecSQL;

S := "";
Application.ProcessMessages;
end;//if
until f.Position = f.Size;

DM.ADOQuery1.SQL.Text := "EXEC sp_dboption ""NSD"", ""select into/bulkcopy"", ""false""";
DM.ADOQuery1.ExecSQL;

f.Free;


Работает без проблем, но, как сами понимаете, очень медленно. Меня интересует, как сделать то же самое через потоки. Неужели сложно написать простейший пример?


Alone Corsar   (2004-01-10 08:55:00) [2]

Кнопочка F1......


Наверх

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