to di2000(一只菜鸟): find 语句怎么用呀,能给个例子吗? to airhorse(编程至尊宝)、tikkypeng(千两狂死郎): 我也想用locate,只是我的条件好多,需要其中好几个字段的值都得满足条件才行,我不知道该如何来写,能帮帮忙吗?
这是一个由用户动态指定定位条件的定位记录的例子。参考一下吧,虽然方法很土,但是能解决实际问题。function TfmTruckRegisteLocate.ShowX: Boolean; var sFields: string; bFind: Boolean; saValues: array of string; begin with TfmTruckRegisteLocate.Create(nil) do try Result := ShowModal = mrOK; bFind := False; saValues := nil; if Result then begin sFields := ''; if chkC_LicenceId.Checked then begin sFields := sFields + ';' + 'C_LicenceId'; SetLength(saValues, High(saValues) + 2); saValues[High(saValues)] := edtC_LicenceId.Text; end; if chkInstallBillId.Checked then begin sFields := sFields + ';' + 'InstallBillId'; SetLength(saValues, High(saValues) + 2); saValues[High(saValues)] := edtInstallBillId.Text; end; if chkInstallUnit.Checked then begin sFields := sFields + ';' + 'InstallUnit'; SetLength(saValues, High(saValues) + 2); saValues[High(saValues)] := edtInstallUnit.Text; end; if chkInstallDate.Checked then begin sFields := sFields + ';' + 'InstallDate'; SetLength(saValues, High(saValues) + 2); saValues[High(saValues)] := FormatDateTime('YYYY-MM-DD', dtpInstallDate.DateTime); end; if chkRegisterId.Checked then begin sFields := sFields + ';' + 'RegisterId'; SetLength(saValues, High(saValues) + 2); saValues[High(saValues)] := edtRegisterId.Text; end;
if sFields <> '' then Delete(sFields, 1, 1); //if Locate('FuncID;GroupID', VarArrayOf([iFuncID,iOldGroupID]), []) then if High(saValues) = 0 then bFind := dmDTMMain.adoA_Register.Locate(sFields, saValues[0], [loCaseInsensitive, loPartialKey]) else if High(saValues) = 1 then bFind := dmDTMMain.adoA_Register.Locate(sFields, VarArrayOf([saValues[0], saValues[1]]), [loCaseInsensitive, loPartialKey]) else if High(saValues) = 2 then bFind := dmDTMMain.adoA_Register.Locate(sFields, VarArrayOf([saValues[0], saValues[1], saValues[2]]), [loCaseInsensitive, loPartialKey]) else if High(saValues) = 3 then bFind := dmDTMMain.adoA_Register.Locate(sFields, VarArrayOf([saValues[0], saValues[1], saValues[2], saValues[3]]), [loCaseInsensitive, loPartialKey]) else if High(saValues) = 4 then bFind := dmDTMMain.adoA_Register.Locate(sFields, VarArrayOf([saValues[0], saValues[1], saValues[2], saValues[3], saValues[4]]), [loCaseInsensitive, loPartialKey]); if not bFind then ShowInfo(Handle, '记录没找到!'); end; finally Free; end;
to GipsyCN(德尔菲): 非常谢谢你为我提供的这个函数,给了我很好的提示,我用数组方法实现了; to di2000(一只菜鸟)、tikkypeng(千两狂死郎)、airhorse(编程至尊宝): 也非常谢谢你们,只是我刚开始学,水平很低,希望以后能得到你们更多的帮助,可以吗? 再次衷心的感谢以上各位朋友:)
find 语句怎么用呀,能给个例子吗?
to airhorse(编程至尊宝)、tikkypeng(千两狂死郎):
我也想用locate,只是我的条件好多,需要其中好几个字段的值都得满足条件才行,我不知道该如何来写,能帮帮忙吗?
var
sFields: string;
bFind: Boolean;
saValues: array of string;
begin
with TfmTruckRegisteLocate.Create(nil) do
try
Result := ShowModal = mrOK;
bFind := False;
saValues := nil;
if Result then
begin
sFields := ''; if chkC_LicenceId.Checked then
begin
sFields := sFields + ';' + 'C_LicenceId';
SetLength(saValues, High(saValues) + 2);
saValues[High(saValues)] := edtC_LicenceId.Text;
end; if chkInstallBillId.Checked then
begin
sFields := sFields + ';' + 'InstallBillId';
SetLength(saValues, High(saValues) + 2);
saValues[High(saValues)] := edtInstallBillId.Text;
end; if chkInstallUnit.Checked then
begin
sFields := sFields + ';' + 'InstallUnit';
SetLength(saValues, High(saValues) + 2);
saValues[High(saValues)] := edtInstallUnit.Text;
end; if chkInstallDate.Checked then
begin
sFields := sFields + ';' + 'InstallDate';
SetLength(saValues, High(saValues) + 2);
saValues[High(saValues)] := FormatDateTime('YYYY-MM-DD', dtpInstallDate.DateTime);
end; if chkRegisterId.Checked then
begin
sFields := sFields + ';' + 'RegisterId';
SetLength(saValues, High(saValues) + 2);
saValues[High(saValues)] := edtRegisterId.Text;
end;
if sFields <> '' then Delete(sFields, 1, 1);
//if Locate('FuncID;GroupID', VarArrayOf([iFuncID,iOldGroupID]), []) then
if High(saValues) = 0 then
bFind := dmDTMMain.adoA_Register.Locate(sFields, saValues[0], [loCaseInsensitive, loPartialKey])
else if High(saValues) = 1 then
bFind := dmDTMMain.adoA_Register.Locate(sFields, VarArrayOf([saValues[0], saValues[1]]), [loCaseInsensitive, loPartialKey])
else if High(saValues) = 2 then
bFind := dmDTMMain.adoA_Register.Locate(sFields, VarArrayOf([saValues[0], saValues[1], saValues[2]]), [loCaseInsensitive, loPartialKey])
else if High(saValues) = 3 then
bFind := dmDTMMain.adoA_Register.Locate(sFields, VarArrayOf([saValues[0], saValues[1], saValues[2], saValues[3]]), [loCaseInsensitive, loPartialKey])
else if High(saValues) = 4 then
bFind := dmDTMMain.adoA_Register.Locate(sFields, VarArrayOf([saValues[0], saValues[1], saValues[2], saValues[3], saValues[4]]), [loCaseInsensitive, loPartialKey]); if not bFind then ShowInfo(Handle, '记录没找到!');
end; finally
Free;
end;
非常谢谢你为我提供的这个函数,给了我很好的提示,我用数组方法实现了;
to di2000(一只菜鸟)、tikkypeng(千两狂死郎)、airhorse(编程至尊宝):
也非常谢谢你们,只是我刚开始学,水平很低,希望以后能得到你们更多的帮助,可以吗?
再次衷心的感谢以上各位朋友:)