我用的是SQL SERVER2000,怎样用DELPHI建一个主从表的程序;几个Tdbedit用来向主表中输入数据,再就是一个dbgrid1,用dbnavigator1向dbgrid中输入若干条数据并显示于dbgrid1中,单击保存便会把主表中数据和dbgrid1中显示的若干条数据存入sql server2000中不同的两个表中,其中还包括一个主表中的单号,此单号在每次点“新单”时都不可能与以前的单号重复。若有较好的例子也可以,发到[email protected]
数据库及服务器名及各项要注意的事项尽量清楚一些,因为本人为DELPHI方面的菜鸟。
现在急需此方面的程序或例子或详细介绍此样程式编写的书(电子书更好),请各位高手伸出缓助之手。托各位了。
数据库及服务器名及各项要注意的事项尽量清楚一些,因为本人为DELPHI方面的菜鸟。
现在急需此方面的程序或例子或详细介绍此样程式编写的书(电子书更好),请各位高手伸出缓助之手。托各位了。
解决方案 »
- delphi与网页相互传值的问题。
- 关于Delphi 2005出错问题
- 求摄像头控制的完整例子
- 一个有关delphi7里调用gif的问题,在线等~~~急~~~~~~~~~
- 用ADO连SQL SERVER做用户密码修改框的问题(180分),解决就结帖!
- ADOQuery中使用delete后,当前位置是否是下一个记录?
- Access2000中自增字段怎么处理?
- 有在南京金思维的请进:你们公司的基于模版的编程是什么意思,能不能给我讲一下,顺便给一个例子,
- SQLserver 的;数据库转移后,用户的问题。
- 如何来用ADO来打开一个ACCESS数据库,并且把数据库中所有记录都读在DBGrid中?要完整的步骤!详细的!80分这么简单的问题!快来抢!择优录用!
- 不知道能不能算是一个ERP的框架,但是请大家近来讨论一下。
- 怎么将查询出的数据保存成网页呢?
再用dts转到sqlserver中
给你一个实际的例子
procedure TFrmFFD.ActionSaveExecute(Sender: TObject);
var
i,j:integer;
begin
//********************************
//*** 判断能否存盘
//********************************
Dtp1.SetFocus;
if Trim(Dtp1.Text)='' then
begin
showmessage('请输入日期!');
Dtp1.SetFocus;
Exit;
end; if Edit_JH.Text='' then
begin
showmessage('请选择井队!');
wwDBLookupCombo_JDMC.SetFocus;
wwDBLookupCombo_JDMC.DropDown;
Exit;
end; if Edit_JH.Text='' then
begin
showmessage('请选择井号!');
wwDBLookupCombo_JHMC.SetFocus;
wwDBLookupCombo_JHMC.DropDown;
Exit;
end; if (Edit_JBRBH.Text='')or(wwDBLookupCombo_JBRMC.Text='') then
begin
showmessage('请选择经办人!');
wwDBLookupCombo_JBRMC.SetFocus;
wwDBLookupCombo_JBRMC.DropDown;
Exit;
end; for i:=2 to EG.RowCount-1 do
begin
if EG.Cells[2,i].ForeText<>'' then
begin
if (EG.Cells[8,i].ForeText='')and(EG.Cells[9,i].ForeText='')and(EG.Cells[10,i].ForeText='') then
begin
showmessage('表格填写不完整不能存盘!');
EG.Col:=8;
EG.Row:=i;
EG.SetFocus;
Exit;
end;//end if EG.Cells[2,i].ForeText<>''
for j:=8 to 10 do
if EG.Cells[j,i].ForeText='' then EG.Cells[j,i].ForeText:='0'
end;//end if EG.Cells[2,i].ForeText<>''
end;//end for i if Edit_DocuNo.Text ='' then Edit_DocuNoDblClick(ActionSave);
Dm.Database_ZJCJ.StartTransaction;
try
//********************************
//*** 增加存盘
//********************************
if Label_State.Caption ='增加' then
begin
Add_FFD;
end;//end if Label_State.Caption ='增加' //********************************
//*** 修改存盘
//********************************
if Label_State.Caption ='修改' then
begin
//先删除,后添加
Del_FFD;
Add_FFD;
end;//end if Label_State.Caption ='修改' Dm.Database_ZJCJ.Commit;
except
Dm.Database_ZJCJ.Rollback;
raise;
//showmess0age('操作失败,网络错误!');
Exit;
end; //end try //存盘以后
BtnControls('Save');
Panel_DocuNo.Enabled :=True;
end;
var
i:integer;
begin for i:=2 to EG.RowCount-1 do
begin
if EG.Cells[2,i].ForeText='' then Break;
with Dm.Query_Query do
begin
Close;
SQL.Clear;
SQL.Add('select YJSL,EJSL,SJSL from TZJCJ_KC where ZJBH='''+EG.Cells[1,i].ForeText+'''');
SQL.Add('and PH='''+EG.Cells[7,i].ForeText+'''');
Open; //判断库存够不够,若不够就触发一个异常
if FieldByName('YJSL').asinteger<StrToFloat(Trim(EG.Cells[8,i].ForeText)) then
raise ERangeError.Create('批号为[ '+EG.Cells[7,i].ForeText+' ]的钻具[ '+EG.Cells[1,i].ForeText+' '+EG.Cells[2,i].ForeText+' ]的一级库存量只剩下 '+FieldByName('YJSL').asstring);
if FieldByName('EJSL').asinteger<StrToFloat(Trim(EG.Cells[9,i].ForeText)) then
raise ERangeError.Create('批号为[ '+EG.Cells[7,i].ForeText+' ]的钻具[ '+EG.Cells[1,i].ForeText+' '+EG.Cells[2,i].ForeText+' ]的二级库存量只剩下 '+FieldByName('EJSL').asstring);
if FieldByName('SJSL').asinteger<StrToFloat(Trim(EG.Cells[10,i].ForeText)) then
raise ERangeError.Create('批号为[ '+EG.Cells[7,i].ForeText+' ]的钻具[ '+EG.Cells[1,i].ForeText+' '+EG.Cells[2,i].ForeText+' ]的三级库存量只剩下 '+FieldByName('SJSL').asstring); end;//end with Dm.Query_Query
end;//end for i for i:=2 to EG.RowCount-1 do
begin
//当这一行为空时,结束存盘
if EG.Cells[2,i].ForeText<>'' then
begin
//自动编写ID
with Dm.Query_MaxNo do
begin
Close;
SQL.Clear;
SQL.Add('select isnull(max(ID),0)+1 as MaxNo from TZJCJ_FF');
Open;
end;
Edit_ID.Text:=Dm.Query_MaxNo.FieldByName('MaxNo').asstring; with Dm.Query_Add do
begin
Close;
SQL.Clear; // 0 1 2 3 4 5 6 7 8 9 10 11 12
SQL.Add('PTZJCJ_FF_Add :@DocuNo,:@ID,:@ZJBH,:@PH,:@RQ,:@JDBH,:@JBRBH,:@YJSL,:@EJSL,:@SJSL,:@BZ,:@ZB,:@JHBH');
Params.Clear;
Params.CreateParam(ftstring,'DocuNo',ptInput);
Params.CreateParam(ftinteger,'ID',ptInput);
Params.CreateParam(ftstring,'ZJBH',ptInput);
Params.CreateParam(ftstring,'PH',ptInput);
Params.CreateParam(ftDate,'RQ',ptInput);
Params.CreateParam(ftstring,'JDBH',ptInput);
Params.CreateParam(ftstring,'JBRBH',ptInput);
Params.CreateParam(ftfloat,'YJSL',ptInput);
Params.CreateParam(ftfloat,'EJSL',ptInput);
Params.CreateParam(ftfloat,'SJSL',ptInput);
Params.CreateParam(ftstring,'BZ',ptInput);
Params.CreateParam(ftstring,'ZB',ptInput);
Params.CreateParam(ftstring,'JHBH',ptInput);
Prepare;
ParamByName('DocuNo').asstring:=Edit_DocuNo.Text;
ParamByName('ID').asstring:=Edit_ID.Text;
ParamByName('ZJBH').asstring:=Trim(EG.Cells[1,i].ForeText);
ParamByName('PH').asstring:=Trim(EG.Cells[7,i].ForeText);
ParamByName('RQ').asstring:=formatdatetime('yyyy-mm-dd',Dtp1.Date);
ParamByName('JDBH').asstring:=Trim(Edit_JDBH.Text);
ParamByName('JBRBH').asstring:=Edit_JBRBH.Text;
ParamByName('YJSL').asstring:=Trim(EG.Cells[8,i].ForeText);
ParamByName('EJSL').asstring:=Trim(EG.Cells[9,i].ForeText);
ParamByName('SJSL').asstring:=Trim(EG.Cells[10,i].ForeText);
ParamByName('BZ').asstring:=Trim(EG.Cells[11,i].ForeText);
ParamByName('ZB').asstring:=Edit_WorkMan.Text;
ParamByName('JHBH').asstring:=Edit_JH.Text;
ExecSQL;
end; //end with Dm.Query_Add
end;//end if EG.Cells[2,i].ForeText<>''
end;//end for i
end;
var
i:integer;
begin
with Dm.Query_Del do
begin
Dm.Query_Modi.Close;
Dm.Query_Modi.SQL.Clear;
Dm.Query_Modi.SQL.Add('select DocuNo,PH,ZJBH,ID,YJSL,EJSL,SJSL from TZJCJ_FF where DocuNo='''+Edit_DocuNo.Text+'''');
Dm.Query_Modi.Open;
for i:=1 to Dm.Query_Modi.RecordCount do
begin
Close;
SQL.Clear;
SQL.Add('PTZJCJ_FF_Del :@DocuNo,:@PH,:@ZJBH,:@ID,:@YJSL,:@EJSL,:@SJSL');
Params.Clear;
Params.CreateParam(ftstring,'DocuNo',ptInput);
Params.CreateParam(ftstring,'PH',ptInput);
Params.CreateParam(ftstring,'ZJBH',ptInput);
Params.CreateParam(ftinteger,'ID',ptInput);
Params.CreateParam(ftFloat,'YJSL',ptInput);
Params.CreateParam(ftFloat,'EJSL',ptInput);
Params.CreateParam(ftFloat,'SJSL',ptInput);
Prepare;
ParamByName('DocuNo').AsString :=Dm.Query_Modi.FieldByName('DocuNo').asstring;
ParamByName('PH').AsString :=Dm.Query_Modi.FieldByName('PH').asstring;
ParamByName('ZJBH').AsString :=Dm.Query_Modi.FieldByName('ZJBH').asstring;
ParamByName('ID').AsString :=Dm.Query_Modi.FieldByName('ID').asstring;
ParamByName('YJSL').AsString :=Dm.Query_Modi.FieldByName('YJSL').asstring;
ParamByName('EJSL').AsString :=Dm.Query_Modi.FieldByName('EJSL').asstring;
ParamByName('SJSL').AsString :=Dm.Query_Modi.FieldByName('SJSL').asstring;
ExecSQL;
Dm.Query_Modi.Next; //Dm.Query_Modi.Next
end; //end for i
end;//end with Dm.Query_Modi
end;
我需一个程序有如下功能:每次点“新单”,几个TDBEDIT中数据存入SQL SERVER2000中的MAINTABEL表中,同时一个DBGRID1中的若干条数据也同时存入SQL SERVER2000中另一个名为SIDE的表中,主从表关联字段为'danhao'这个字段,这个字段是显示在一个DBTEXT中或RZDBLABEL1中,就相当于单号了吧!当然,这个单号永远不重复,每点一次“新单”都会不同,可能要自已写一个函数来生成这个单号了。数据库方面我用ADO连,但总是单号方面有问题,主从表也出问题呀!
麻烦高手帮小弟做一个这样的例子或别人写好的这样类似结构的程序发给[email protected]先谢了!
OICQ:184486517