//在输入分录表时调用DLL中的表格选择科目名称和号码 procedure TDocuInputStringGridDblClick(Sender: TObject); var showForm:TShowDllForm; module:Thandle; begin //只有双击指定列才有效 if curCol<> then exit; //读入DLL module:=loadlibrary(secdll); //如果读入错误则module会是一个小于的错误代码 //由此可以判断是否读入成功 if module< then exit; @showForm:=getprocaddress(modulepchar()); if @showForm=nil then exit; //通过DLL传递参数 stringgridCells[curRow]:=showForm(applicationHandle选择科目名称科目表); //为科目代码添加科目名称 adoqueryClose; adoquerySQLClear; adoquerySQLAdd(select 科目名称 from 科目表 where 科目代码 =+stringgridCells[curRow]+); adoqueryOpen; stringgridCells[curRow]:=adoqueryfieldbyname(科目名称)AsString; end; //对分录表进行插入和修改时所执行的操作 procedure TDocuInputOpType(opname: string); var i:integer; inputvaloutputvaloldnum:string; begin //如果是新增凭证则直接将分录表中的数据逐条插入 if opname=insert then begin for i:= to do begin //如果表格中为空则跳出循环 if stringgridCells[i]= then continue; inputval:=stringgridcells[i]; outputval:=stringgridcells[i]; //插入数据由于借方和贷方数据在sql server中为money故需要进行转换 adocommandCommandText:=insert into 分录表([凭证编号][科目代码] [借方][贷方][摘要]) values(+dbeditText+ +stringgridCells[i]+cast(+inputval+ as money) cast(+outputval+ as money)+stringgridCells[i]+); adocommandExecute; end; end; if opname=edit then begin for i:= to do begin if stringgridCells[i]= then continue; inputval:=stringgridcells[i]; outputval:=stringgridcells[i]; //对凭证所属的分录表原有数据进行更新 if i<=recordnum then adocommandCommandText:=update 分录表 set [科目代码] =+stringgridcells[i]+[借方]=cast(+inputval+ as money) [贷方]=cast(+outputval+ as money)[摘要]=+stringgridCells[i] + where 编号=+mytable[i]+ else //插入凭证所属的分录表中的新数据 adocommandCommandText:=insert into 分录表([凭证编号][科目代码] [借方][贷方][摘要]) values(+dbeditText+ +stringgridCells[i]+cast(+inputval+ as money) cast(+outputval+ as money)+stringgridCells[i]+); adocommandExecute; end; end; end; [] [] [] |