毕业设计卡住了,高手帮忙...(200分)

  • 主题发起人 主题发起人 笨狼321
  • 开始时间 开始时间

笨狼321

Unregistered / Unconfirmed
GUEST, unregistred user!
我在做毕业设计时用到dbgrid,
1.为了添加方便就直接在bdgrid里添加,谁能告诉我用什么语句查询dbgrid里的值在表里已经存在?
2.为了保证信息的齐全,我在表里设置了好多信息不能为空,请问怎么在dbgrid里添加和修改时保证(判断)不允许为空的的项不为空,如果是空就弹出信息"请填好必要信息";
3.在表里有datetime类型,请问在在dbgrid里设置用户输入不是时间内容时报错(弹出消息让用户确认类型);
4.谁能不发个数据库备份的代码给我,我的油箱是benlang321@sina.com;
谢谢,
数据库用的是SQL SERVER。
我都用了好几中方法了,总是报错,真的郁闷,希望高手能帮帮忙,帮我摆脱郁闷[:(]
 
大家帮帮忙呀
不要只看不回呀
 
1.2好像不是问题吧,dbgrid只是用来显示你的数据的,dbgrid中的的值你的表中当然就有.如果某字段设为不为空,在程序运行时如有空值就是自动弹出对话框.
 
1、查询我用的是笨方法 ,对表格进行一次遍历。
2、添加数据之前,对数据进行一次遍历检查。好像没啥其他好方法吧。。。
3、对那个datetime加个验证语句,不对就弹出对话框吧。。。
4、这个好像这里有的,你搜索一下吧。。。
呵呵,我都是笨办法,菜鸟一个。
 
1, 如果不是关键字,那么只能通过sql语句查询.
2, 最好在异常捕获中书写, 如果提交时有未填的必填字段,则提示.
3, 在异常捕获时判断,或者在提交时判断.
4, 这里有上百中备份的代码,自己找.

建议:
最好不要让用户在dbgrid中录入数据, 这样你控制器来很麻烦. 还是用标准控件好, 容易控制. 除非, 你对dbgrid, datasource, query这些控件的提交, 异常, 事件等比较熟悉.
 
1.直接用语句 select count(*) from table where ....按条件到数据库查找,看符合的记录数目,>=1就存在
2.在beforepost判断字段的值,或者设置字段required为true
3.datetime类型自己会检查,不过提示是英文的。你也可以自己写检查
4.够简单吧!
QryBK.Close;
QryBK.SQL.Text := Format('backup database %s to disk= ''%s''', [DataBaseName, fileName]);
QryBK.ExecSQL;
 
procedure TForm1.ADOQuery1BeforePost(DataSet: TDataSet);
begin
if DataSet.FieldByName('必填字段1').AsString='' then
begin
ShowMessage('请填好必填字段1信息');
Abort;
end;
if DataSet.FieldByName('必填字段2').AsString='' then
begin
ShowMessage('请填好必填字段2信息');
Abort;
end;

Query2.Close;
Query2.SQL.Text:='select Count(*) as IsExists from 检查的表 where 检查字段(假设是整形) = '+
DataSet.FieldByName('检查字段').AsString;
Query2.Open;
if Query2.FieldByName('IsExists').AsInteger>0 then
begin
ShowMessage('记录已经存在, 请重新录入!');
Abort;
end;
end;


//-----------备份数据库
先连接到 master 数据库

然后
Query.Close;
Query.SQL.Text:=Format('BACKUP DATABASE [数据库名] TO DISK = ''备份文件名'' WITH INIT',
Query.ExecSQL;
 
能给点代码吗?
1,是主键,要不也不要查询是否已经存在
2,我写了if 语句,但是新的问题有来了,如果添了后再删掉(没有post)就会报错,
 
ADOQuery1.First ;
while not ADOQuery1.Eof do
begin
if ADOQuery1.FieldByName('VARCHAR0').AsString = '' then
begin
Application.MessageBox(pchar('请输入原材料编号!') , pchar(AllMsgStr) ,MB_ICONWARNING+MB_OK);
exit;
break;
end;
if ADOQuery1.FieldByName('VARCHAR1').AsString = '' then
begin
Application.MessageBox(pchar('请输入原材料名称!') , pchar(AllMsgStr) ,MB_ICONWARNING+MB_OK);
exit;
break;
end;
if ADOQuery1.FieldByName('VARCHAR18').AsString = '' then
begin
Application.MessageBox(pchar('请输入供应商编号!') , pchar(AllMsgStr) ,MB_ICONWARNING+MB_OK);
exit;
break;
end;
if ADOQuery1.FieldByName('VARCHAR19').AsString = '' then
begin
Application.MessageBox(pchar('请输入供应商名称!') , pchar(AllMsgStr) ,MB_ICONWARNING+MB_OK);
exit;
break;
end;
if (ADOQuery1.FieldByName('FLOATN1').AsFloat = 0 ) then
begin
Application.MessageBox(pchar('请输入入库数量!') , pchar(AllMsgStr) ,MB_ICONWARNING+MB_OK);
exit;
break;
end;
if ADOQuery1.FieldByName('DATETIME1').AsString = '' then
begin
Application.MessageBox(pchar('请输入入库日期!') , pchar(AllMsgStr) ,MB_ICONWARNING+MB_OK);
exit;
break;
end;
end;
 
2.update事件里面判断,若为空给提示
 
直接用try...except来处理。当用户没有输入时,有异常错误提示。如:
try
.....
adoquery1.post;
showmessage('保存成功!');
except
showmessage('信息输入不完整,保存失败!');
 
虽然没完全解决
但我还是很满意的
 
1.遍历.first,next...
2.update事件判断,如果text为空,提示
3.update事件里面判断类型
如果用dbgrideh这些问题都非常好解决,用dbgrid就不知道了,dbgrid用的不多
 
To 笨狼321:
1.可以在数据集的BeforePost事件中,使用SQL语句查询一下使用者录入的数据是否与数据库中的重复,如果重复可在此事件中使用Abort语句终止Post动作;
2.同样可以在数据集的BeforePost事件中使用TField的IsNull属性判断字段是否为Null;
3.为字段指定OnValidate处理句柄,如果使用者输入的内容不对,则在此过程中抛出异常;
4.关于数据库备份的代码,网上有好多相关资源,可以上网搜寻一下,我就不再赘述了。
 

Similar threads

回复
0
查看
830
不得闲
回复
0
查看
886
不得闲
回复
0
查看
1K
不得闲
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部