INSERT ... //в таблицув кеоторая будет служить буфером, гд есть поле ID IDENTITY(1,1) DECLARE @id INT DECLARE @SaveExe VARCHAR(1000) DECLARE @RESULT INT SET @id = Scope_Identity() SET @SaveExe = 'SaveToPath -i' + CAST(@id AS VARCHAR) + ' -sc:\Share\' // где SaveToPath - программа которая берет из таблицы blob поле и сохраняет по пути которая служит вторым параметром set @result = master..xp_cmdshell @SaveExe, no_output if @result = 0 delete Table where id = @id
DWORD WINAPI SaveDocToFile (LPVOID ID){ int id = (int)ID; AnsiString fn = "C:\\MyTemp\\" + FileTableForm->FTADODataSetFileName->AsString.Trim(); TADOStoredProc *FileQuery = new TADOStoredProc(FileTableForm); FileQuery->Active = false; FileQuery->Connection = FileTableForm->FTADOConnection; FileQuery->ProcedureName = "GetFile;1"; FileQuery->Parameters->CreateParameter("@No",ftInteger,pdInput,4,id); FileQuery->Active = true; TBlobField *FileQueryBody = (TBlobField*)FileQuery->FieldByName("File"); FileQueryBody->SaveToFile(fn); FileQuery->Active = false; FileTableForm->FTProgressBar->Position = 100; delete FileQuery; return 0;}
TBlobStream *stm1 = // получаем поток из поля БДTFileStream *stm2 = new TFileStream ("somefile.tmp");char buf;ProgressBar1->Max = stm1->Size;for (long i = 0; i < stm1->Size; i++){ stm1->Read(&buf, 1); stm2->Write(&buf, 1); ProgressBar1->Pos++;}
void __fastcall TForm1::Button1Click(TObject *Sender) { TBlobStream *Stream1; TStream *Stream2; Stream1 = new TBlobStream(Table1Notes, bmRead); try { ClientDataSet1->Edit(); // here’s another way to create a blob stream Stream2 = ClientDataSet1->CreateBlobStream(ClientDataSet1->FieldByName("Remarks"), bmReadWrite); try { Stream2->CopyFrom(Stream1, Stream1->Size); ClientDataSet1->Post(); } __finally { delete Stream2; } } __finally { delete Stream1; }}
#include "DB.hpp"// взависимости от того что используете#include "ADODB.hpp"
DWORD WINAPI SaveDocToFile (LPVOID ID){ int id = (int)ID; AnsiString Buffer = 0; Char * buffer = 0; AnsiString fn = "C:\\MyTemp\\" + FileTableForm->FTADODataSetFileName->AsString.Trim(); TADOStoredProc *FileQuery = new TADOStoredProc(FileTableForm); FileQuery->Active = false; FileQuery->Connection = FileTableForm->FTADOConnection; FileQuery->ProcedureName = "GetFile;1"; FileQuery->Parameters->CreateParameter("@No",ftInteger,pdInput,4,id); FileQuery->Active = true; TADOBlobStream *BS = new TADOBlobStream((TBlobField*)FileQuery->FieldByName("File"),bmRead); TFileStream *FStream = new TFileStream (fn,fmCreate); for (int i = 0; i < BS->Size; i++) { BS->Position = i; BS->Read(&Buffer,1); buffer = Buffer.c_str(); FStream->Write(&buffer,1); FileTableForm->FTProgressBar->Position = 100 * i / BS->Size; } FileTableForm->FTProgressBar->Position = 0; FileQuery->Active = false; delete FileQuery; return 0;
DWORD retcode; if ( !GetExitCodeThread( ThreadHandle, &retcode ) ) { cout << "GetExitCodeThread is NULL"; TimerThread->Enabled = false; } else if ( retcode != STILL_ACTIVE) { cout << "Thread is executed"; TimerThread->Enabled = false; }