关于视图的问题(100分)

娃娃

Unregistered / Unconfirmed
GUEST, unregistred user!
我这里有这样一段代码
with MainDataModule.FreeADOQuery do //生成月数据
begin
Close;
SQL.Clear;
SQL.Add('Create view print1 as '+
'select 所属种类,sum(日品种销售量) AS 月销售量 from printview '+
'group by 所属种类');
ExecSQL;
end;
******with MainDataModule.BreedADOQuery do //生成日数据
begin
Close;
SQL.Clear;
SQL.Add('Create view print2 as '+
'Select 所属种类,sum(日品种销售量) AS 日销售量 from printview '+
'where 发货日期=:findsdate '+
'Group By 所属种类');
Parameters.ParamByName('findsdate').Value :=FormatDateTime('yyyy/mm/dd',StartDateTimePicker.Date);
ExecSQL;
end;
可是执行时,总是停在有******号的那一行,提示“View附近有错误”
有没有那位知道是怎么回事?
 
关了DELPHI,把你生成的.dcu文件删除,再打开编译,这一句应该不会出问题,应该是
ExecSQL;
这句出的问题
把你的建立视图的语句先在查询分析器中运行试试
 
我试过把这个语句在查询分析器里用过了,两句都可以成立,而且不管是单独用
还是一起用都可以。就是在程序里就不行了。
 
第一个,DCU文件删除没有?
你生成的视图删除没有?
 
全部都删除了,如果不删除视图不会是这样的提示,他会提示说
视图已经存在了。
 
还是如上的提示,不知道是不是Delphi不能连续生成视图啊,
再帮帮忙吧。
 
奇怪,想不出有什么问题了,不能帮你
 
虽然没有解决问题,不过还是谢谢你了。

还有没有朋友知道的?求教了!
 
我一般在建立一个视图前都先去drop同名的(用try……)。免得麻烦。
顶楼的老兄您试试?
 
这个我也想到了,我有这样的代码。

还是不行啊。
 
我觉得最好在数据库里就建立好视图,这不仅提高效率,也可一发现问题。
然后从数据库里直接读出来,应该就可以的。
 
这个思路也不错,不过如何能在前端传递参数进去呢。

比如第二个视图(我用的是SQL server 2000),

要传递一个日期进去,有没有朋友知道的。
 
有没有朋友知道呢?
 
参数的传法与ADOQUERY一样的
with MainDataModule.BreedADOQuery do //生成日数据
begin
Close;
SQL.Clear;
SQL.Add('select * from View名');
Parameters.ParamByName('findsdate').Value :=FormatDateTime('yyyy/mm/dd',StartDateTimePicker.Date);
ExecSQL;
end;
即可
 
我不知道你试过没有,你的方法不行!
 
使用什么数据库?
ADO(MS.OLEDB.4.0)+Access对Parameter的处理有些问题。
如果是这个问题,你可以:
1、换用ODBC 或
2、不要用Parameter语句
 
我用的是SQL server上面的SQL语句是没有问题的应该。
因为在SQL server自带的查询分析器里可以通过的。
 
使用ADO的Microsoft.oledb.4.0不能正确处理Parameter。
尽管命令没有错误,但传到数据库的最终命令却可能是错误的。

为什么一定要使用Parameter呢?
为什么不直接先组装出命令串再发给数据库呢?
 
我也试过了,也是不行。我用事件探查器看过传过去的SQL语句了,应该
没有什么问题,可是就是不行。
 
顶部