给tquery控件加字符串类型的计算字段 然后在tquery控件的OnCalcFields事件中写代码 假设计算字段名为fieldname,存放标识的字段名为fieldflag if query1.fieldbyname('fieldflag').asstring='0' then query1.fieldbyname('fieldname').asstring:='原材料'; if query1.fieldbyname('fieldflag').asstring='1' then query1.fieldbyname('fieldname').asstring:='半成品'; if query1.fieldbyname('fieldflag').asstring='2' then query1.fieldbyname('fieldname').asstring:='成品';
select no as 编号,name as 名称,case class when 0 then '原材料' when 1 then '半成品' when 2 then '成品' else '' end as 类别 from table
我已经在SQL Server2000+Delphi7.0中测试过,已经通过! ^_^,接分拉
to xugang96(漂泊在外,居无定所):用我的方法试一下 给tquery控件加字符串类型的计算字段 然后在tquery控件的OnCalcFields事件中写代码 假设计算字段名为fieldname,存放标识的字段名为fieldflag if query1.fieldbyname('fieldflag').asstring='0' then query1.fieldbyname('fieldname').asstring:='原材料'; if query1.fieldbyname('fieldflag').asstring='1' then query1.fieldbyname('fieldname').asstring:='半成品'; if query1.fieldbyname('fieldflag').asstring='2' then query1.fieldbyname('fieldname').asstring:='成品';
to xshmeng(爽爽) : 我很菜的,你的那DBGrid1.FieldColumns[FieldName]属性我无法运行,还有用 wangzn1979(梦郎2001)和 yoic(我是一棵菠菜,菜,菜,菜,菜,菜,菜,) 的方法都只能在数据库的查询分析器中运行,而无法使用TQUERY控件运行,我已经等了半天了,哪位高手快快搞定吧!!!! TO zzheaptech(风的往事) ,你的方法我也试了,不行,不过我没理解你的把‘给tquery控件加字符串类型的计算字段’这话的意思,能否说的详细一点!
我的方法不行马? 起了怪了! 你把你的TQuery的sql语句贴出来 不可能不行的!
to to xshmeng(爽爽):就是在tquery控件中创建永久性的字段对象 你先把表中原有的字段创建永久字段对象,然后在创建一个计算字段对象 第一步 你先双击tquery控件然后在弹出的小窗体中点右键,选第三项(add all fields; 第二步:创建计算字段 点右键,选第二项(new fields); 输入name,选择type,输入size就可以了 然后点calculated单选按扭 最后点ok
我真的到现在还没搞定,就是在SQL的查询分析器里可以正常运行,可一旦用D6的TQUERY控件书写同样的SQL语句运行就出错,真不知是啥原因 出现 'INVAILD USE OF KEYWORD' TOKEN:WHEN
这就是查询中的核心程序,其中与引号是无关的。 With qry_erp do begin Close; Sql.Clear ; Sql.Text:='Select case workdate' +' when ''0'' then ''20030120'' ' +' when ''1'' then ''20030121'' ' +' when ''2'' then ''20030122'' ' +' end as workdate ,re from noworkday '; Prepare; Open; end; 错误信息是:(好像是关键子 WHEN) Project project_erp.exe raise exception class EDBEngineError with message 'Invalid use of keyword ,Token:When line Number:1',Process stop.........
TO ttwandln(孤独雪) 老兄,你不要乱骂呀,不是你说的那么简单的,我是要把数据库中用代码表示的字段用通俗的文字显示出来,且在查询时就要做到,而非简单的改改TITLE就可以的。
这是我以前编的一个东东,和你的要求一样. 当尺寸<=10时显示"small",介于11-39时显示"Middle",当>=40时显示"Large",同时在括号里显示原始数据.Table1是表名 Size是该字段名 GetText表示这个过程写在OnGetText事件里:procedure TForm1.Table1SIZEGetText(Sender: TField; var Text: String; DisplayText: Boolean); var i : integer; begin i := Sender.AsInteger; if i < 11 then Text := 'small' else if (i> 10) and (i<40) then Text := 'Middle' else Text := 'Large'; Text := Text + '('+inttostr(i)+')'; DisplayText := True;end;
select field1, case field2
when 0 then 原材料
when 1 then 半成品
when 2 then 成品
end
from table
when 0 then ''原材料''
when 1 then ''半成品''
when 2 then ''成品''
end as field2//或者end as 你命名的字段名称
from table
如果通的话就给分吧 ^_^
如果没有那个产品类型表的话,可以创建临时表,然后再join、select
有问题,出在WHEN那里
然后在tquery控件的OnCalcFields事件中写代码
假设计算字段名为fieldname,存放标识的字段名为fieldflag
if query1.fieldbyname('fieldflag').asstring='0' then
query1.fieldbyname('fieldname').asstring:='原材料';
if query1.fieldbyname('fieldflag').asstring='1' then
query1.fieldbyname('fieldname').asstring:='半成品';
if query1.fieldbyname('fieldflag').asstring='2' then
query1.fieldbyname('fieldname').asstring:='成品';
decode(0,'原材料',1,'半成品',2,'成品','')
to wangzn1979(梦郎2001)
decode(0,'原材料',1,'半成品',2,'成品','')
这段代码写在什么地方?我没有用过decode
if sender.Text='0' then
text:= '原材料'
else if sender.Text='1' then
text:= '半成品 '
else text:='成品';
end;
and so on!
比较简单,不是吗?
SQL Server中用 case ..when..when....else end
对不?
NO NAME CLASS(表中用字符‘0’代表原材料,‘1’半成品‘2’成品)
2002 螺丝 1
2003 垫片 0
2004 轮胎 2
现在我要用SQL语言查询并显示出来时,将0,1,2转成原材料,半成品,成品
即:
编号 名称 类别
2002 螺丝 半成品
2003 垫片 原材料
2004 轮胎 成品
问题就出在如何在用TQUERY(和DBGRID相联)查询时,显示成这种样子?如何书写SQL语言?
from table
^_^,接分拉
给tquery控件加字符串类型的计算字段
然后在tquery控件的OnCalcFields事件中写代码
假设计算字段名为fieldname,存放标识的字段名为fieldflag
if query1.fieldbyname('fieldflag').asstring='0' then
query1.fieldbyname('fieldname').asstring:='原材料';
if query1.fieldbyname('fieldflag').asstring='1' then
query1.fieldbyname('fieldname').asstring:='半成品';
if query1.fieldbyname('fieldflag').asstring='2' then
query1.fieldbyname('fieldname').asstring:='成品';
改两个属性即可呀:
DBGrid1.FieldColumns[FieldName].PickList.CommaText := '原材料,半成品,成品';
DBGrid1.FieldColumns[FieldName].KeyList.CommaText := '0,1,2';也可以去字段编辑器里去编辑PickList和KeyList里面。编辑方式同上
字段类型可能是字符,也可能是数字,也可能是别的,怎么办??
我很菜的,你的那DBGrid1.FieldColumns[FieldName]属性我无法运行,还有用 wangzn1979(梦郎2001)和 yoic(我是一棵菠菜,菜,菜,菜,菜,菜,菜,) 的方法都只能在数据库的查询分析器中运行,而无法使用TQUERY控件运行,我已经等了半天了,哪位高手快快搞定吧!!!!
TO zzheaptech(风的往事) ,你的方法我也试了,不行,不过我没理解你的把‘给tquery控件加字符串类型的计算字段’这话的意思,能否说的详细一点!
起了怪了!
你把你的TQuery的sql语句贴出来
不可能不行的!
你先把表中原有的字段创建永久字段对象,然后在创建一个计算字段对象
第一步
你先双击tquery控件然后在弹出的小窗体中点右键,选第三项(add all fields;
第二步:创建计算字段
点右键,选第二项(new fields);
输入name,选择type,输入size就可以了
然后点calculated单选按扭
最后点ok
出现
'INVAILD USE OF KEYWORD'
TOKEN:WHEN
With qry_erp do
begin
Close;
Sql.Clear ;
Sql.Text:='Select case workdate'
+' when ''0'' then ''20030120'' '
+' when ''1'' then ''20030121'' '
+' when ''2'' then ''20030122'' '
+' end as workdate ,re from noworkday ';
Prepare;
Open;
end;
错误信息是:(好像是关键子 WHEN)
Project project_erp.exe raise exception class EDBEngineError with message 'Invalid use of keyword ,Token:When line Number:1',Process stop.........
case field
when 1 then ''1''
when 2 then ''2''
else ''3'' end
双击DBGRID,大打开的窗口中点击某一字段,title中有一.......
看清楚人家问的什么再发言吧
老兄,你不要乱骂呀,不是你说的那么简单的,我是要把数据库中用代码表示的字段用通俗的文字显示出来,且在查询时就要做到,而非简单的改改TITLE就可以的。
当尺寸<=10时显示"small",介于11-39时显示"Middle",当>=40时显示"Large",同时在括号里显示原始数据.Table1是表名
Size是该字段名
GetText表示这个过程写在OnGetText事件里:procedure TForm1.Table1SIZEGetText(Sender: TField; var Text: String;
DisplayText: Boolean);
var
i : integer;
begin
i := Sender.AsInteger;
if i < 11 then Text := 'small'
else if (i> 10) and (i<40) then Text := 'Middle'
else Text := 'Large';
Text := Text + '('+inttostr(i)+')';
DisplayText := True;end;
不过我现在不太喜欢用DB感知控件——可控性不好.
然且用一个过程来实现。
我有一个过程但只能用于bde,
var
procedure zetoc (dataset: Tdataset;q_etoc:tquery );stdcall;external 'zz_EtoC.dll' name'zetoc';调用
letoc(query1,query2);//query1是你的数据集。query2是我的过程中用的
例子
letoc(table1,query2);
你可以发mail到[email protected]索取这个dll文件.是免费的。