在Table(Query)的GetText事件写程序 if Table1.FieldByName('性别').AsString='1' then Text:='男' else Text:='女'赋值时在SetText下写与上面相反的程序
在Table(Query)的GetText事件写程序 if Table1.FieldByName('性别').AsString='1' then Text:='男' else Text:='女'赋值时在SetText下写与上面相反的程序
在Table(Query)的GetText事件写程序 if Table1.FieldByName('性别').AsString='1' then Text:='男' else Text:='女'赋值时在SetText下写与上面相反的程序
在oncalculate事件中写 if xx=1 then 男 else 女
在Table(Query)的GetText事件写程序 if Table1.FieldByName('性别').AsString='1' then Text:='男' else Text:='女'赋值时在SetText下写与上面相反的程序
可以用dbgrid的canvas属性 在DBGrid1DrawColumnCell中加入相应语句即可 如: var i:integer; begin for i:=0 to query1.recordcount-1 do begin if datacol=2 then{性别列} begin if query1['xb']=true then{判断性别} dbgrid1.Canvas.textout(rect.left,rect.top,'男') else dbgrid1.canvas.textout(rect.left,rect.top,'女'); end; end;
添加一个计算字段(双击Table在对话框增加一个字段field1,Calculated类型的) 然后在table的OnCalculate事件中写 if Table.FieldByName('sex').asinteger=1 then table.fieldbyname('field').asstring:='男' else table.fieldbyname('field').asstring:='女'; 最后,在DBGrid中,显示field字段,就OK!
重新导到excel表中,将为‘1’的改为‘男’、为‘2’的改为‘女’,再导到数据库里。
楼上的flowersun(song),szf(szf)两位朋友的答案是正确的,给分吧
var str:string; begin str:='select 性别=case 性别 when ''2'' then ''女'' else ''男'' end from tablename'; with Query do begin close; sql.clear; sql.add(str); open; end; end;
如果是sql server的,直接在sql中用case when就是了。 其他的可以用计算字段
用query语句如下: select (case when sex='1' then '男' else '女' end) as 性别,* from youtabel
ora: select decode(性别,1,'男',2,'女','不男不女') from table;
我真的不明白: 1.TTable和TQuery的GetText和SetText事件在哪里?怎么从Help中查不到?请给我一段带有Query1.GetText的过程好吗? 2.我用的是Paradox表,从SQL Explorer中使用case when 语句(小白兔的句子)时,出错: Invalid use of keyword。 Token:when 是不是只能在MS SQL Server中才能这样用? 上述两种用法,我真没有运行通过。
呵呵,不幸被你言中了那你就用szf(szf)的方法不过他说错了 在Table(Query) 中NEW一个Calculated字段如sex 在sex字段的GetText事件写程序 if Table1.FieldByName('性别').AsString='1' then Text:='男' else Text:='女' 赋值时在SetText下写与上面相反的程序
type TForm1 = class(TForm) DBGrid1: TDBGrid; Table1: TTable; DataSource1: TDataSource; procedure Table1Field1GetText(Sender: TField; var Text: String; DisplayText: Boolean); procedure Table1Field1SetText(Sender: TField; const Text: String); procedure Table1AfterOpen(DataSet: TDataSet); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Table1Field1GetText(Sender: TField; var Text: String; DisplayText: Boolean); begin case Sender.AsInteger of 0: Text := '女'; 1: Text := '男'; 2: Text := '不男不女'; end; end;procedure TForm1.Table1Field1SetText(Sender: TField; const Text: String); begin if Text = '女' then Sender.AsInteger := 0 else if Text = '男' then Sender.AsInteger := 1 else Sender.AsInteger := StrToIntDef(Text, 0); end;procedure TForm1.Table1AfterOpen(DataSet: TDataSet); begin DataSet.FieldByName('Field1').OnGetText := Table1Field1GetText; DataSet.FieldByName('Field1').OnSetText := Table1Field1SetText; end;
MySql:select IF(sex="1","男",“女") from tablename
this: MySql:select IF(sex="1","男","女") from tablename
求教各位高手: select 性别=case 性别 when ''2'' then ''女'' else ''男'' end from tablename 这样的功能在Oracle中如何实现。
回复人: cdkogh(xp++) (2002-1-22 21:19:00) 得0分 ora: select decode(性别,1,'男',2,'女','不男不女') from table;
begin adodataset.commandtext:='select ''' + '性别''=case when (性别=''2'') then ''女'' else ''男'' end from tablename'; with adodataset do begin open; datasource1.dataset:=adodataset; dbgrid1.datasource=datasource1; end; end;
if Table1.FieldByName('性别').AsString='1' then
Text:='男'
else
Text:='女'赋值时在SetText下写与上面相反的程序
if Table1.FieldByName('性别').AsString='1' then
Text:='男'
else
Text:='女'赋值时在SetText下写与上面相反的程序
if Table1.FieldByName('性别').AsString='1' then
Text:='男'
else
Text:='女'赋值时在SetText下写与上面相反的程序
if xx=1 then
男
else
女
if Table1.FieldByName('性别').AsString='1' then
Text:='男'
else
Text:='女'赋值时在SetText下写与上面相反的程序
在DBGrid1DrawColumnCell中加入相应语句即可
如:
var
i:integer;
begin
for i:=0 to query1.recordcount-1 do
begin
if datacol=2 then{性别列}
begin
if query1['xb']=true then{判断性别}
dbgrid1.Canvas.textout(rect.left,rect.top,'男')
else
dbgrid1.canvas.textout(rect.left,rect.top,'女');
end;
end;
//简单又方便,直接存取,一条记录就多一个字节,现在的硬盘这样大
//何必要为省一点空间,找这么多麻烦?//个人观点仅供参考
然后在table的OnCalculate事件中写
if Table.FieldByName('sex').asinteger=1 then
table.fieldbyname('field').asstring:='男'
else
table.fieldbyname('field').asstring:='女';
最后,在DBGrid中,显示field字段,就OK!
str:string;
begin
str:='select 性别=case 性别 when ''2'' then ''女'' else ''男'' end from tablename';
with Query do
begin
close;
sql.clear;
sql.add(str);
open;
end;
end;
其他的可以用计算字段
select (case when sex='1' then '男' else '女' end) as 性别,*
from youtabel
szf(szf),lijx18(lijx):TTable和TQuery的GetText事件在哪里?没有找到。
Judas(),whitehare(小白免),lynu(lynu):用的是Paradox,没有when。
用计算字段应该也是可行的。
回复人: zswang(伴水)(需要充充电) (2002-1-21 10:45:26) 得0分
为什么不用字符字段?
char(2)
//简单又方便,直接存取,一条记录就多一个字节,现在的硬盘这样大
//何必要为省一点空间,找这么多麻烦?
//个人观点仅供参考
DataSource,DataField,ListSource,ListField
和pb的数据窗口对象不一样 ,哈!哈!一般要写SQL 语句。
1.采用Select Case
2.采用计算字段,
3.Szf提供方法.
多,当你为一个查询而挠头时,不妨试试用CASE来写
select decode(性别,1,'男',2,'女','不男不女') from table;
1.TTable和TQuery的GetText和SetText事件在哪里?怎么从Help中查不到?请给我一段带有Query1.GetText的过程好吗?
2.我用的是Paradox表,从SQL Explorer中使用case when 语句(小白兔的句子)时,出错:
Invalid use of keyword。
Token:when
是不是只能在MS SQL Server中才能这样用?
上述两种用法,我真没有运行通过。
在Table(Query) 中NEW一个Calculated字段如sex
在sex字段的GetText事件写程序
if Table1.FieldByName('性别').AsString='1' then
Text:='男'
else
Text:='女'
赋值时在SetText下写与上面相反的程序
TForm1 = class(TForm)
DBGrid1: TDBGrid;
Table1: TTable;
DataSource1: TDataSource;
procedure Table1Field1GetText(Sender: TField; var Text: String;
DisplayText: Boolean);
procedure Table1Field1SetText(Sender: TField; const Text: String);
procedure Table1AfterOpen(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Table1Field1GetText(Sender: TField; var Text: String;
DisplayText: Boolean);
begin
case Sender.AsInteger of
0: Text := '女';
1: Text := '男';
2: Text := '不男不女';
end;
end;procedure TForm1.Table1Field1SetText(Sender: TField; const Text: String);
begin
if Text = '女' then
Sender.AsInteger := 0
else if Text = '男' then
Sender.AsInteger := 1
else Sender.AsInteger := StrToIntDef(Text, 0);
end;procedure TForm1.Table1AfterOpen(DataSet: TDataSet);
begin
DataSet.FieldByName('Field1').OnGetText := Table1Field1GetText;
DataSet.FieldByName('Field1').OnSetText := Table1Field1SetText;
end;
MySql:select IF(sex="1","男",“女") from tablename
MySql:select IF(sex="1","男","女") from tablename
select 性别=case 性别 when ''2'' then ''女'' else ''男'' end from tablename
这样的功能在Oracle中如何实现。
ora:
select decode(性别,1,'男',2,'女','不男不女') from table;
其实DataGrid中有个自带方法DataGrid.Item_Bound(),这是在DataGrid绑定item时自动激发的,可以解决以上问题。
private void Item_Bound(Object sender, DataGridItemEventArgs e) {
switch(e.Item.Cells[2].Text){
case "0":
e.Item.Cells[2].Text = "人事部";
break;
case "1":
e.Item.Cells[2].Text = "技术部";
break;
}
}
adodataset.commandtext:='select ''' + '性别''=case when (性别=''2'') then ''女'' else ''男'' end from tablename';
with adodataset do
begin
open;
datasource1.dataset:=adodataset;
dbgrid1.datasource=datasource1;
end;
end;