A
B
C
A
D
C
A
以上是一组有重复记录的数据,请问如何用SQL语句这样实现?
如果这一组数据有哪怕是有一条记录重复,返回1,如果没有记录重复,则返回0
15 个解决方案
#1
select count(id) from table_name group by id having count(name)>1
#2
你误会了
我是想这样:
A
B
C
A
D
C
A
这是一组没有正式提交到表中的数据,但在DBGrid上已经显示出来了(已经执行了query1->POST() 但还没有Query1->ApplyUpdates();)在这一组数据中,如果哪怕有一条已经是重复的记录,那么就返回1,否则,返回0 ,请问用sql语句如何实现?
我是想这样:
A
B
C
A
D
C
A
这是一组没有正式提交到表中的数据,但在DBGrid上已经显示出来了(已经执行了query1->POST() 但还没有Query1->ApplyUpdates();)在这一组数据中,如果哪怕有一条已经是重复的记录,那么就返回1,否则,返回0 ,请问用sql语句如何实现?
#3
??不在数据库表中的数据也能够用sql操作?
#4
你将该字段设为唯一索引,然后用TRY CATCH容错处理不更好些吗?在缓存中的数据是不能用SQL的,只能自写代码比较了吧
#5
你应该在post()以前进行比较!
#6
可以在OnColExit事件中判断。
假如你有5个字段:a,b,c,d,e;那么就定义5个String的变量:
String sa,sb,sc,se;
然后这样写:
void __fastcall TForm1::DBGrid1ColExit(TObject *Sender)
{
int i;
i=DBGrid1->SelectedIndex;
switch(i)
{
case 0:
sa=Trim(DBGrid1->SelectedField->Text);
break;
case 1:
sb=Trim(DBGrid1->SelectedField->Text);
if(sa==sb)
{
ShowMessage(sb);
Abort();
}
break;
case 2:
sc=Trim(DBGrid1->SelectedField->Text);
if(sc==sa||sc==sb)
{
ShowMessage(sc);
Abort();
}
break;
case 3:
sd=Trim(DBGrid1->SelectedField->Text);
ShowMessage(sa+","+sb+","+sc+","+sd);
if(sd==sa||sd==sb||sd==sc)
{
ShowMessage(sd);
Abort();
}
break;
case 4:
se=Trim(DBGrid1->SelectedField->Text);
if(se==sa||se==sb||se==sc||se==sd)
{
ShowMessage(se);
Abort();
}
break;
case 5:
sf=Trim(DBGrid1->SelectedField->Text);
if(sf==sa||sf==sb||sf==sc||sf==sd||sf==se)
{
ShowMessage(sf);
sa="";
sb="";
sc="";
sd="";
se="";
sf="";
Abort();
}
break;
}
}
假如你有5个字段:a,b,c,d,e;那么就定义5个String的变量:
String sa,sb,sc,se;
然后这样写:
void __fastcall TForm1::DBGrid1ColExit(TObject *Sender)
{
int i;
i=DBGrid1->SelectedIndex;
switch(i)
{
case 0:
sa=Trim(DBGrid1->SelectedField->Text);
break;
case 1:
sb=Trim(DBGrid1->SelectedField->Text);
if(sa==sb)
{
ShowMessage(sb);
Abort();
}
break;
case 2:
sc=Trim(DBGrid1->SelectedField->Text);
if(sc==sa||sc==sb)
{
ShowMessage(sc);
Abort();
}
break;
case 3:
sd=Trim(DBGrid1->SelectedField->Text);
ShowMessage(sa+","+sb+","+sc+","+sd);
if(sd==sa||sd==sb||sd==sc)
{
ShowMessage(sd);
Abort();
}
break;
case 4:
se=Trim(DBGrid1->SelectedField->Text);
if(se==sa||se==sb||se==sc||se==sd)
{
ShowMessage(se);
Abort();
}
break;
case 5:
sf=Trim(DBGrid1->SelectedField->Text);
if(sf==sa||sf==sb||sf==sc||sf==sd||sf==se)
{
ShowMessage(sf);
sa="";
sb="";
sc="";
sd="";
se="";
sf="";
Abort();
}
break;
}
}
#7
特别注意!变量必须在:
private: // User declarations
String sa,sb,sc,sd,se,sf;
定义。不然变量离开程序块时其值会被折构掉。
private: // User declarations
String sa,sb,sc,sd,se,sf;
定义。不然变量离开程序块时其值会被折构掉。
#8
实际使用中不必加ShowMessage(xx);
#9
tiegerium(/*老唐*/:
你的代码,我原贴了,可是似乎没有什么反应啊
我是想这样:
A
B
C
A
D
C
A
在这些数据没有提交到表以前,(存在缓存中)DBGrid上已经显示出来了,也就是说已经执行了query1->POST() 但还没有Query1->ApplyUpdates();如果这些没有正式提交到表中的数据存在重复记录,那么系统给个提示:“有重复记录,数据提交失败” 同时并不执行Query1->ApplyUpdates();,请问如何实现?
附:DBGrid并不单单显示的这些没有正式提交到数据库中的这些数据,同时还显示出了表中的原始数据。
你的代码,我原贴了,可是似乎没有什么反应啊
我是想这样:
A
B
C
A
D
C
A
在这些数据没有提交到表以前,(存在缓存中)DBGrid上已经显示出来了,也就是说已经执行了query1->POST() 但还没有Query1->ApplyUpdates();如果这些没有正式提交到表中的数据存在重复记录,那么系统给个提示:“有重复记录,数据提交失败” 同时并不执行Query1->ApplyUpdates();,请问如何实现?
附:DBGrid并不单单显示的这些没有正式提交到数据库中的这些数据,同时还显示出了表中的原始数据。
#10
我经过测试,运行得很好。不过对于你的情况,你必须修改一些才可以:你的TDBGrid有多少列?如5列,col0,col1....col4,则变量分别是:String strCol0,strCol1......strCol4.
说明一下,我的代码是这样实现的,如果出现重复,则光标在原处不动,不管数据有没有提交,只要单元格中有字符就可以。
说明一下,我的代码是这样实现的,如果出现重复,则光标在原处不动,不管数据有没有提交,只要单元格中有字符就可以。
#11
tiegerium(/*老唐*/:
我明白了,原来是点击DBGrid时触发了该事件啊(呵呵,谢谢)
可我想这样:
不点击DBGrid 而是点击一个button按钮,也能出现象你这样的提示,但是仅仅判断DBGrid中最大入库编号的那几条记录(DBGrid中有一个字段叫“入库编号”)请问如何实现?
比如:
MC RKBH
A 01
B 01
C 01
A 02
D 02
C 02
A 02
但点击Button按钮时,仅仅判断RKBH 是02(也就是最大入库编号)的那几条记录,请问如何实现? 提示还按你的那样
我明白了,原来是点击DBGrid时触发了该事件啊(呵呵,谢谢)
可我想这样:
不点击DBGrid 而是点击一个button按钮,也能出现象你这样的提示,但是仅仅判断DBGrid中最大入库编号的那几条记录(DBGrid中有一个字段叫“入库编号”)请问如何实现?
比如:
MC RKBH
A 01
B 01
C 01
A 02
D 02
C 02
A 02
但点击Button按钮时,仅仅判断RKBH 是02(也就是最大入库编号)的那几条记录,请问如何实现? 提示还按你的那样
#12
或者不按照你做的提示,只要DBGrid中最大入库编号有重复的记录,则当点击Btton按钮时会给出一个提示:“数据重复” 如果这样,更好。
#13
等我有空的时候帮你想。
#14
呵呵,麻烦你了
不过我确实很急
不过我确实很急
#15
应该这样
select id from table_name group by id
select id from table_name group by id
#1
select count(id) from table_name group by id having count(name)>1
#2
你误会了
我是想这样:
A
B
C
A
D
C
A
这是一组没有正式提交到表中的数据,但在DBGrid上已经显示出来了(已经执行了query1->POST() 但还没有Query1->ApplyUpdates();)在这一组数据中,如果哪怕有一条已经是重复的记录,那么就返回1,否则,返回0 ,请问用sql语句如何实现?
我是想这样:
A
B
C
A
D
C
A
这是一组没有正式提交到表中的数据,但在DBGrid上已经显示出来了(已经执行了query1->POST() 但还没有Query1->ApplyUpdates();)在这一组数据中,如果哪怕有一条已经是重复的记录,那么就返回1,否则,返回0 ,请问用sql语句如何实现?
#3
??不在数据库表中的数据也能够用sql操作?
#4
你将该字段设为唯一索引,然后用TRY CATCH容错处理不更好些吗?在缓存中的数据是不能用SQL的,只能自写代码比较了吧
#5
你应该在post()以前进行比较!
#6
可以在OnColExit事件中判断。
假如你有5个字段:a,b,c,d,e;那么就定义5个String的变量:
String sa,sb,sc,se;
然后这样写:
void __fastcall TForm1::DBGrid1ColExit(TObject *Sender)
{
int i;
i=DBGrid1->SelectedIndex;
switch(i)
{
case 0:
sa=Trim(DBGrid1->SelectedField->Text);
break;
case 1:
sb=Trim(DBGrid1->SelectedField->Text);
if(sa==sb)
{
ShowMessage(sb);
Abort();
}
break;
case 2:
sc=Trim(DBGrid1->SelectedField->Text);
if(sc==sa||sc==sb)
{
ShowMessage(sc);
Abort();
}
break;
case 3:
sd=Trim(DBGrid1->SelectedField->Text);
ShowMessage(sa+","+sb+","+sc+","+sd);
if(sd==sa||sd==sb||sd==sc)
{
ShowMessage(sd);
Abort();
}
break;
case 4:
se=Trim(DBGrid1->SelectedField->Text);
if(se==sa||se==sb||se==sc||se==sd)
{
ShowMessage(se);
Abort();
}
break;
case 5:
sf=Trim(DBGrid1->SelectedField->Text);
if(sf==sa||sf==sb||sf==sc||sf==sd||sf==se)
{
ShowMessage(sf);
sa="";
sb="";
sc="";
sd="";
se="";
sf="";
Abort();
}
break;
}
}
假如你有5个字段:a,b,c,d,e;那么就定义5个String的变量:
String sa,sb,sc,se;
然后这样写:
void __fastcall TForm1::DBGrid1ColExit(TObject *Sender)
{
int i;
i=DBGrid1->SelectedIndex;
switch(i)
{
case 0:
sa=Trim(DBGrid1->SelectedField->Text);
break;
case 1:
sb=Trim(DBGrid1->SelectedField->Text);
if(sa==sb)
{
ShowMessage(sb);
Abort();
}
break;
case 2:
sc=Trim(DBGrid1->SelectedField->Text);
if(sc==sa||sc==sb)
{
ShowMessage(sc);
Abort();
}
break;
case 3:
sd=Trim(DBGrid1->SelectedField->Text);
ShowMessage(sa+","+sb+","+sc+","+sd);
if(sd==sa||sd==sb||sd==sc)
{
ShowMessage(sd);
Abort();
}
break;
case 4:
se=Trim(DBGrid1->SelectedField->Text);
if(se==sa||se==sb||se==sc||se==sd)
{
ShowMessage(se);
Abort();
}
break;
case 5:
sf=Trim(DBGrid1->SelectedField->Text);
if(sf==sa||sf==sb||sf==sc||sf==sd||sf==se)
{
ShowMessage(sf);
sa="";
sb="";
sc="";
sd="";
se="";
sf="";
Abort();
}
break;
}
}
#7
特别注意!变量必须在:
private: // User declarations
String sa,sb,sc,sd,se,sf;
定义。不然变量离开程序块时其值会被折构掉。
private: // User declarations
String sa,sb,sc,sd,se,sf;
定义。不然变量离开程序块时其值会被折构掉。
#8
实际使用中不必加ShowMessage(xx);
#9
tiegerium(/*老唐*/:
你的代码,我原贴了,可是似乎没有什么反应啊
我是想这样:
A
B
C
A
D
C
A
在这些数据没有提交到表以前,(存在缓存中)DBGrid上已经显示出来了,也就是说已经执行了query1->POST() 但还没有Query1->ApplyUpdates();如果这些没有正式提交到表中的数据存在重复记录,那么系统给个提示:“有重复记录,数据提交失败” 同时并不执行Query1->ApplyUpdates();,请问如何实现?
附:DBGrid并不单单显示的这些没有正式提交到数据库中的这些数据,同时还显示出了表中的原始数据。
你的代码,我原贴了,可是似乎没有什么反应啊
我是想这样:
A
B
C
A
D
C
A
在这些数据没有提交到表以前,(存在缓存中)DBGrid上已经显示出来了,也就是说已经执行了query1->POST() 但还没有Query1->ApplyUpdates();如果这些没有正式提交到表中的数据存在重复记录,那么系统给个提示:“有重复记录,数据提交失败” 同时并不执行Query1->ApplyUpdates();,请问如何实现?
附:DBGrid并不单单显示的这些没有正式提交到数据库中的这些数据,同时还显示出了表中的原始数据。
#10
我经过测试,运行得很好。不过对于你的情况,你必须修改一些才可以:你的TDBGrid有多少列?如5列,col0,col1....col4,则变量分别是:String strCol0,strCol1......strCol4.
说明一下,我的代码是这样实现的,如果出现重复,则光标在原处不动,不管数据有没有提交,只要单元格中有字符就可以。
说明一下,我的代码是这样实现的,如果出现重复,则光标在原处不动,不管数据有没有提交,只要单元格中有字符就可以。
#11
tiegerium(/*老唐*/:
我明白了,原来是点击DBGrid时触发了该事件啊(呵呵,谢谢)
可我想这样:
不点击DBGrid 而是点击一个button按钮,也能出现象你这样的提示,但是仅仅判断DBGrid中最大入库编号的那几条记录(DBGrid中有一个字段叫“入库编号”)请问如何实现?
比如:
MC RKBH
A 01
B 01
C 01
A 02
D 02
C 02
A 02
但点击Button按钮时,仅仅判断RKBH 是02(也就是最大入库编号)的那几条记录,请问如何实现? 提示还按你的那样
我明白了,原来是点击DBGrid时触发了该事件啊(呵呵,谢谢)
可我想这样:
不点击DBGrid 而是点击一个button按钮,也能出现象你这样的提示,但是仅仅判断DBGrid中最大入库编号的那几条记录(DBGrid中有一个字段叫“入库编号”)请问如何实现?
比如:
MC RKBH
A 01
B 01
C 01
A 02
D 02
C 02
A 02
但点击Button按钮时,仅仅判断RKBH 是02(也就是最大入库编号)的那几条记录,请问如何实现? 提示还按你的那样
#12
或者不按照你做的提示,只要DBGrid中最大入库编号有重复的记录,则当点击Btton按钮时会给出一个提示:“数据重复” 如果这样,更好。
#13
等我有空的时候帮你想。
#14
呵呵,麻烦你了
不过我确实很急
不过我确实很急
#15
应该这样
select id from table_name group by id
select id from table_name group by id