太奇怪了!!我用delphi6.0+access存储图片,后再用删除图片,比如
delete * from ok where id=3,那么id为3的这一行都已经被清空了,存储图像的字段也再这一行中.
但是为什么数据库大小没有变小呢?
于是我进入access查看,包括图片字段在内的整行已经清空了,而且也不能从数据库中读取出图片了,那为什么数据库的大小没有变小呢?清各位指教!!!
delete * from ok where id=3,那么id为3的这一行都已经被清空了,存储图像的字段也再这一行中.
但是为什么数据库大小没有变小呢?
于是我进入access查看,包括图片字段在内的整行已经清空了,而且也不能从数据库中读取出图片了,那为什么数据库的大小没有变小呢?清各位指教!!!
"Remote Server=http://myServerName;" & _
"Remote Provider=MSDASQL;" & _
"DSN=AdvWorks;" & _
"Uid=myUsername;" & _
"Pwd=myPassword"
如果设置的是OLE DB Provider 的话: oConn.Open "Provider=MS Remote;" & _
"Remote Server=http://myServerName;" & _
"Remote Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=c:somepathmydb.mdb", _
"admin", "" 3.自己编写服务器程序,通过TCP/IP,传递Recordset。 4.使用第三方控件,如:ADO Anywhere或UDAParts RDB等。 5.使用XMLHTTP其中有的不适合你的条件,有的不适合delphi来做。
function TfrmMain.CompactDatabase(const AFileName, APassWord: string): Boolean;
const
SConnectionString = 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;'
+ 'Jet OLEDB:Database Password=%s;';
var
SPath: string;
SFile: array[0..254] of Char;
STempFileName: string;
JE: OleVariant; function GetTempDir: string;
var
Buffer: array[0..MAX_PATH] of Char;
begin
ZeroMemory(@Buffer, MAX_PATH);
GetTempPath(MAX_PATH, Buffer);
Result := IncludeTrailingBackslash(StrPas(Buffer));
end;begin
Result := False;
SPath := GetTempDir; //取得Windows的Temp路径
GetTempFileName(PChar(SPath), '~ACP', 0, SFile); //取得Temp文件名,Windows将自动建立0字节文件
STempFileName := SFile; //PChar->String
if not DeleteFile(STempFileName) then Exit; //删除Windows建立的0字节文件
try
JE := CreateOleObject('JRO.JetEngine'); //建立OLE对象,函数结束OLE对象超过作用域自动释放
OleCheck(JE.CompactDatabase(Format(SConnectionString, [AFileName, APassWord]),
Format(SConnectionString, [STempFileName, APassWord]))); //压缩数据库
//复制并覆盖源数据库文件,如果复制失败则函数返回假,压缩成功但没有到函数的功能
Result := CopyFile(PChar(STempFileName), PChar(AFileName), False);
DeleteFile(STempFileName); //删除临时文件
except
//压缩失败
end;
end;