假如在数据库db1中有一个表table1(ID[integer],Name[string],sex[string],age[]integer])
我想在delphi里实现当程序运行得时候,首先检查此表存不存在,如果存在得话,把里面的一一数据读出来,
构造一个个记录 Tname = Record,然后动态构建一个链表,把这些记录存入链表里。
求实现得代码。俺在线等待。
我想在delphi里实现当程序运行得时候,首先检查此表存不存在,如果存在得话,把里面的一一数据读出来,
构造一个个记录 Tname = Record,然后动态构建一个链表,把这些记录存入链表里。
求实现得代码。俺在线等待。
select * from table1
判断是否存在名字为table1
的数据表,如果存在,就访问!!!
ID: integer;
Name: string;
Sex: String; //怎么这个要用string的呀?有这么多性别么?
Age: integer;
PPrev: PYourRec;
end;
PYourRec = ^TYourRec;
var
qry: TQuery;
pUrRec, pUrRec1: PYourRec;
begin
qry := TQuery.Create(nil);
...//一些初始化操作,例如数据库属性等。
qry.SQL.Add('select * from your tbl');
try
qry.Open;
pUrRec := nil;
pUrRec1 := nil;
while not qry.eof do
begin
New(pUrRec1);
pUrRec1^.ID := qry.FieldByName('ID').asInteger;
pUrRec1^.Name := qry.FieldByName('Name').AsString;
...//照葫芦化瓢 pUrRec1^.pPrev := pUrRec;
pUrRec ;= pUrRec1; qry.next;
end; //pUrRec现在就是你要的链表的尾巴了。
finally
qry.close;
qry.free;
end;
end;
type
Pname =^Tname
Tname = Record
ID: integer;
Name: string;
Sex: string;
Age: integer;
end;procedure GetData;
var
myname: Pname;
begin
with adoquery do
begin
Close;
SQL.Text := 'select * from table1';
Open;
if not IsEmpty then
begin
//开始填充链表
First;
while not eof do
begin
new(myname);
myname^.ID:= FieldByName(ID).AsInteger;
myname^.Name:= FieldByName(Name).AsString;
myname^.Sex:= FieldByName(Sex).AsString;
myname^.Age:= FieldByName(Age).AsInteger;
next;
end;
end;
end;
end;
楼上这位大哥多支持了,小妹刚刚上手。
数据库里查存不存在表table1。
function FindTable(var ATableName: string): boolean;
var
myQuery: TAdoQuery;
begin
try
myQuery := TAdoQuery.Create(nil);
try
with myQuery do
begin
Close;
SQL.clear;
SQL.text :=
'Select * from InFormation_Schema.tables where Table_Name='''
+ ATableName + '''';
Open;
if IsEmpty then
result := False
else
result := true;
end;
finally
myQuery.Free;
end;
except
showmessage('错误的数据库操作');
end;
end;
select * from table1 ';
if adoquery.RecordCount > 0 then
open
else
exit ;
但SQL.clear;
SQL.text :=
'Select * from InFormation_Schema.tables where Table_Name='''
+ ATableName + '''';改为
adoquery1.SQL.text :='Select * from sysobjects where name=''+YOURTABLENAME+''';
type
Pname =^Tname
Tname = Record
ID: integer;
Name: string;
Sex: string;
Age: integer;
end;
创建记录的时候,出现错误‘Expected ':'but '='found ’错误语句在’Tname = Record‘的’=‘上,为什没??????????这是对的呀?求救
应该是
Pname =^Tname;//少了分号
qry := TADOQuery.Create(nil); 。。 //一些初始化操作,例如数据库属性等。 qry.SQL.Add('select * from your cfg');哪位大哥能帮我写一下初始化的代码啊?
var
SL: TStrings;
begin
SL := TStringList.Create;
try
adoCon.Open;
adoCon.GetTableNames(SL, False);
if SL.IndexOf('table1')<>-1 then begin
//有这个表。用adoQuery执行一个查询,循环结果记录集就行
end;
finally
SL.Free;
adoCon.Close;
end;
end;
2.链表应该也不难,以前学pascal是好像用的比较多,现在很少用了,一般都用类对象实现
至于链表,多数用TStrings我认为,与其它语言相比,TStrings是delphi亮点之一。up!
!!!
up
通过Delphi异常也可以实现判断!
第二问你为什么不用现成的类实现呢?
不过借光做个链接,希望能把问题解决,大家都去看看,UP一下,人气也旺一点呀。两个问题是一样的,只不过一个用delphi写的,一个用VC写的,不过都出现了同样的问题,就是
内存越来越大。
http://community.csdn.net/Expert/topic/3649/3649016.xml?temp=.1845972 // delphi
http://community.csdn.net/Expert/topic/3656/3656672.xml?temp=.363949 // vc
TADOQUERY 的open 和 EXECSQL 两个属性 是有不同的,OPNE 是有反回值的,而EXCESQL必须是没有反回值的SQL语句.懂了吗?天使MM