紧急求助!有关SQL中视图使用中的问题?(200分)

  • 主题发起人 主题发起人 xiaohuo
  • 开始时间 开始时间
X

xiaohuo

Unregistered / Unconfirmed
GUEST, unregistred user!
各位先进:
本人用DELPHI操作SQL数据库,对其中的表建立了视图,然而在执行时,出现EDBEngineError,出错信息为“capability not supported”,本人不知是什么原因?另外,请问如何根据出错信息来判断BDE引擎的错误,有没有什么文档可以参考?再次不甚感激!程序如下:
with TQ do
begin
SQL.Clear;
SQL.Add('Create VIEW ViewVoice(Date_Time,tYear,tMonth,tDay,tWeek,Location,Status,FileSize)');
SQL.Add('AS select Date_Time,DatePart(yy,Date_Time),DatePart(mm,Date_Time),DatePart(dd,Date_Time),DatePart(dw,Date_Time),Location,Status,FileSize from Table_Voice');
SQL.Add('where UserId=:UserId');
ParamByName('UserId').AsString:=User_Str;
Prepare;
ExecSql;
 
动态生成的sql语句是不支持参数的输入的,
至少我在一般的查询语句里都没试成功过。
既然你已经使用动态方法了为什么不这样写:
SQL.Add('where UserId='+IntToStr(User_Str));
 
*不知您的資料庫用那一種?
*你可以把這段SQL拿到SQL Explorer中試試
若不通過,那就是SQL語法上的問題,或者使用資料庫不支援的函式。
*動態SQL格式,也可使用Format函式 例:
const TableName = "EPLOYEE";
SQL.Add(Format("SELECT * FROM %s",[TableName]));
*EDBEngineError的錯誤訊息代碼可由下例方式取得:
try
...
except
on E: Exception do
if E is EDBEngineError then
YourCode := EDBEngineError.Errors[0].ErrorCode;
end;
*代碼對照表可查Delphi4/Doc/bde.int
 
URUS和FLYFANTASY的答案,我都看过了,我在SQL EXPLORER中试过的,答案是正确的,所以说FLYFANTASY的说法可以排除;
此外,我曾在测试程序中实验是成功的,所以说URUS讲法欠妥。
毕竟,这是200分,其实不一定好拿的。希望以后的同志能多从它的出错信息入手,从
BDE中想想办法,兴许才有突破!
 
你用的是什么数据库?

 
我认为是BDE的SQL不支持你的这个SQL语句的语法。
 
我认为你需要注意!
1. Create Table , Create View 等DDL SQL (数据库定义语句)
不支持参数方式执行!!!
Create View 的作用是在SQL Server 中建立了一个视图;
建立视图后, 你可以把它当作一个表来操作, 如Select,Insert
等操作. 参数方法操作 仅仅支持
Select , Insert, Delete, Excute(执行存储过程)等SQL语句的操作
2. 当数据库中已经存在同名视图, 视图将无法建立, (同建立Table一样).
3. 你做了一个自相矛盾做法, 到底是想建立一个SQL Server的视图对象呢?
还是执行一个条件查询呢? 你不可以既建立视图, 又想执行查询.


如果是建立view
只需要对数据库执行以下 SQL 语句
Create VIEW ViewVoice
(UserID,
Date_Time,
tYear,
tMonth,
tDay,
tWeek,Location,Status,FileSize)
AS select
UserID
Date_Time,
DatePart(yy,Date_Time),
DatePart(mm,Date_Time),
DatePart(dd,Date_Time),
DatePart(dw,Date_Time),
Location,
Status,
FileSize ,
from Table_Voice);

以后在应用程序中, 你只需要按作一般参数查询的方法:
with Query1 do begin
SQL.Text := 'Select * from ViewVoice where UserID =:UserID';
ParamByName('UserId').AsString:=User_Str;
try
prepare;
Open;
except
On E:Exception do begin
showmessage(E.message);
end;
end;
end;

BTW,
to urus :
动态生成的SQL语句当然支持Param方式, 只是Param仅仅限于
'值参数',
 
看了众位的回答,本人还是认为不满意,原因是所提方法及建议有误,因为在此之前,本人已经进行了不断的尝试,并且在另外一个调试程序中是成功的。而在此程序中却总不对,本人再次提醒各位朋友能够切实帮本人解决这个问题。从错误提示信息入手。
 
xiaohuo, 你的操作方法一不符合逻辑, 二不不可能调试通,
请你解释一下, 这么操作的目的是什么!, 是想在server上建立一个视图
对象呢? 还是想查询一个结果!
如果是第一种目的, 还存在一个问题, 如果server上已经建立了这个
视图, 再次建立会出错的!
 
多人接受答案了。
 
后退
顶部