我想自动把数据生成一个表存盘,可以指定表名字、指定存盘路径?想各位求救!!!(送100分!) (100分)

  • 主题发起人 主题发起人 njskinglc
  • 开始时间 开始时间
N

njskinglc

Unregistered / Unconfirmed
GUEST, unregistred user!
[:(][:(][:(]大哥们,我有这个问题很长时间了,听说这里高手很多,特意来请教一下,望能
指点一二。具体就是,我想在一个FORM上放几个输入的文本框或其他什么输入的组件。运行时候
一点按钮,就自动生成一个表。就好像保存文件一样,不过是保存为DB格式的数据表。
请各位大哥救命啊!
 
使用第三方控件,如Halcyon
 
ClientDataSet 的 savetofile 可以 保存为 .cds ,.xml格式的。
用的时候可以直接load。
 
1.先创建表,如果表存在就跳过这一步
可以用Field名作为Edit的Name,设定Edit的MAXLENGTH
设定TAG,根据TAG判断类型
for i :=0 to Form1.ComponentCount-1 do
if Form1.Components is TEdit then
CASE TEdit(Form1.Components).Tag of
1: tmpList.Add(TEdit(Form1.Components).Name+' '+'CHAR('+InttoStr(TEdit(Form1.Components).MaxLength)+')');
2: tmpList.Add(TEdit(Form1.Components).Name+' INTEGER');
...
end;
CREATE TABLE "AAA.DB" (tmplist.CommaText)
2.再把数据填进去
INSERT INTO AAA VALUES(...)
3.记录滚动时再刷新Edit.Text
 
但是你每一次不是把上一次保存的记录覆盖了?
我希望是每填一次数据,就生成一个表。
可以吗?
 
那专门用一个生成数据表的方法,用dxdbgrid,把各种情况列上,字段名称,长度,缺省值
等,表名,然后创建就行了,如果重复提示
 
建立表之前先判断相应的表是否存在?
当然可以进一步判断相应的字段是否符合要求。

如果表已存在就直接添加数据,否则新建表后再插入数据。
 
表的结构已经定好了,字段名和长度,类型都定了。
表是不存在的,在保存的时候就输入表的名字。表放的路径 。
我是不知道怎么做了。
如:一个表,有NO、NAME两个字段。我在输入的地方输入数据,一按按钮,输入自动放在NO、NAME 内
再按保存,就像保存文件一样输入名字,路径。就是这样。下次我再运行程序,再输入数据,
又重新生成一个表。原理就是这样了。我怎么也做不好。请大家教我吧。头都大了。
 
这样呀,那你建立一个TTable类型的表对象,如
var
mytable:TTable;
begin
mytable:=TTable.create(nil);
mytable.databasename:='D:/.....';//表存放路径
mytable.tablename:='mytable';//给表起名字叫mytable
with myTable do
begin
TableType :=ttParadox;
FieldDefs.Add('no',ftInteger,0,True);
FieldDefs.Add('name',ftString,10,True);
IndexDefs.Add('IndexID','no',[ixPrimary,ixUnique]);
CreateTable ;
end;
end;
这样就可以插入数据之类了,不过你最好检测一下是否有重复的表名或不存在的路径
OK,Just try.多看帮助
 
你可以把 QUERY 的 DataBaseName 作为要保存的路径
SQL 语句中 CREATE TABLE '+输入的表名+' 就好了.
当然先要判断输入的表名是否存在。FileExists( ).
 
来如风大哥,这个做了好像不行,因为表生成以后,每次都把上一次的表覆盖了。
 
不会的,如果你的表名字不一样的话肯定不会覆盖的
记着每次改名字肯定不会覆盖的
 
谢谢你,来如风大哥,我昨晚再加上一个savedialog控件,就可以了,这样做对不对?还有没有更好的方法?
另外,表是生成了,但是数据的输入好像没有解决 ,我用两个EDIT文本框输入数据,怎样相应POST给这个数据表呢?
 
加那个控件是用来选数据表的存放地址的吧?这样做是正确的。
因为你的表是每次都要创建的,所以呢最好用个edit框来接收表的名字,每次最好不要用
同一个名字,那样就会出现你所谓的覆盖掉了;
把数据内容提交给数据表的方法很多,可以用sql语句,也可以自己插入,
如:
tablename.open;//把表tablename打开,记着这个tablename其实就是你刚才创建的表名字,
//如可以为tablenameedit.text
tablename.append;//向表中追加数据
tablename['no']:=noedit.text;//不知道你的是什么类型的,大概就是这个方法
tablename['name']:=nameedit.text;//noedit,nameedit是你的两个edit控件的name
tablename.post;//提交,
tablename.close;//关闭表,操作完毕
//附:多看看帮助
 
嗯,我去试试,谢谢来如风大哥,你可要多来,我可以多点向你请教。
 
一起学习吧,
多看看帮助,这是很有必要的
 
你可以参考一下大型数据库的做法!大型数据库如Sybase都有一个基本的库Master,当新建一个
数据库时,就会从Master库里拷贝一份过去作为基本的信息!
你可以建立一个新的表命名为master,然后在需要使用表的时候先拷贝一份作为临时表,然后
把数据保存进去,随后把表改名为你想要的名称!只需要在改名时,判断一下是否有同名的表
存在就可以了!
 
eight说的对, 用ClientDataSet,一定可以满足你的需求
 
简单的方法用ado
生成文件数据库,然后可以用其他的数据库,向数据库中添加后更新数据,不用第三方空间
这个问题享誉我交流可以联系我,longbo@163.com。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部