paradox数据库怎么添加记录?(100分)

  • 主题发起人 主题发起人 weapontsen
  • 开始时间 开始时间
W

weapontsen

Unregistered / Unconfirmed
GUEST, unregistred user!
用Database Desktop建Paradox库,全是Alpha型字段,当我用下面的程序添加数据时,程序执行完可数据用Database Desktop查询,新加的数据一个也看不到,怎么办才能添加进去。
if Locate('URL',URLEdit.Text,[loCaseInsensitive]) then
MessageDlg('..........
else
Table1.AppendRecord([ComboBox1.Text,ComboBox2.Text,ComboBox3.Text,URLEdit.Text,SimpleEdit.Text,Memo1.Text]);
 
你纪录加不进去,在程序运行的时候有没有报错?
我亲自试了一下,可以
数据库 paradox5.x 字段:a alpha 100 ,b alpha 100,c alpha 100
table1.open;
table1.AppendRecord([Edit1.Text,combobox1.Text, memo1.Text]);
 
你有没有post.
 
没有报错。另外,用AppendRecord函数已经包含了post过程
 
对呀,AppendRecord本身语法没有错误,关键是:
1. 你的主键对不对。
2. 你的字段顺序对不对。
3. 你打开的方式应该是允许读写。
 
主键在PARADOX数据库中究竟起什么作用,怎样设置,我一直很糊涂。麻烦给解释一下。另外字段顺序应该没有问题,我每次测试的数据应该在所有字段范围之内。我已经将AutoEdit属性设为True,应该可以写入了。cytown,如你在线,找个聊天室我向你请教。
 
你可以在AppendRecord后执行一下table1.active:=false;
然后再table1.active:=true,看一下行了吗?据我所知,只有在
table1.active:=false 以后数据才能被真正地写到文件中去。
 
好象还是不行
 
按理说的程序没有报错,应该不会有问题.
你把程序运行一次,加完纪录后,把Datebase Desktop
重新启动,重新打开数据表.看看有没有!
 
应该没问题,可能:
1.需要主键(没它,在Datebase Desktop下有时数据无法显示)
2.需要刷新(刚删改数据,需刷新或重新打开)
3.用别的东西打开(SQL Explorer或在Form上放个DBGrid)
 
weapontsen, 我一般不去聊天室(没时间):-(
你确认我说的现象都没有吗?
 
我认为这样:
先添加DataBase1,设置好属性,在Table1的AfterPost事件添加:
DataBase1.ApplyUpdates([table1]);
还有把Table1的CachedUpdates设置为True;
在把"Table1.AppendRecord([ComboBox1.Text,ComboBox2.Text,ComboBox3.Text,URLEdit.Text,SimpleEdit.Text,Memo1.Text]);"改为“Table1.post;”
你这样试一试,应该行。
 
To 探索者:我就是按你说的方法才发现数据没有加进去。
To fstao:我按照你说的做后,返回错误信息“Index is read only”,可是我把所有的
readonly的属性全部改成False,问题依旧。
To cytown:我用Database Desktop添加一些数据后,再用我的程序打开数据库,返回“Index is out of date”,我想是不是主键设置的问题,对字符型的字段究竟该怎样设置主键?
 
从现象来看, 应该是INDEX的问题, DBD不打开INDEX所以INDEX文件就过时了.
你TABLE1打开时指定INDEX了吗? 查一下是不是这个问题?
 
cytown,能不能具体说一下INDEX的设置方法?
 
我以前也为设置INDEX大伤脑筋,后来才发现,INDEX不在Delphi的Object
Inspector里设的,而是要在Database Desktop里设,设主索引(Key)只需在
建库窗口里的‘Key'栏中打上*就可以了,而设置第二(第三、第四……)索引
则要在建库窗口的右上角点下拉菜单,选Secendry Index,剩下的么,你应该一看
就会了。
 
table1.append(...)表示在表单最后加入记录;
table1.insert(...)表示在当前位置之前添加记录,
很好实现的。
 
现在我已经知道如何设置INDEX了,可是设完之后,依然不对。我用TDBedit,TDBMemo控件直接控制,用键盘输入,输入框根本没有反应。
我的INDEX设置是新加了一个longInteger型序号域(我根本用不着)做KEY索引,
将一个字符型域建立了二级索引(MAINTAINED为TRUE).

这个问题折腾我一个星期,拜托各位仔细研究一下!!!
 
你知道错在哪里吗?错在用locate,你了解locate的工作原理吗?打个比方,假如表里
有1,2,3三个数据。当在Edit1里填写2,执行locate,可以查询到2。如果填写1时,
肯定找不到1。为何呢?因为第一次执行时,它的指针指到数据2,第二次执行时,它从
数据2开始向下查询,当然找不到1啦。我认为最好方法是用try..except..end;
添加database1、table1和button1,在Table1的Afterpost事件为:database1.applyupdates([table1]);
在button1的click事件为:
try
table1.post;
except
messagedlg('***,又重复了');
Abort;
end;
祝你好运
 
多人接受答案了。
 
后退
顶部