如何提交数据到SQL SERVER 2000

fxhyhy 2006-12-20 07:04:59
我做了一个数据转换的程序,是将ORACLE 7.3数据库的数据转换至SQL SERVER 2000数据库,且两者的数据库结构并不相同,我用两个TABLE 控件和两个DBGrid 控件来实现,其中table1对应ORACLE 7.3数据库和DBGrid1,table2对应SQL SERVER 2000数据库和DBGrid2,两个table均在程序运行后打开各自对应的数据库转换代码如下:
for(a=1;a<='table1中的记录数';a++)
{
DBGrid2->fields[0]->Value=DBGrid1->fields[0]->Value;
DBGrid2->fields[1]->Value=DBGrid1->fields[1]->Value;
DBGrid2->fields[2]->Value=DBGrid1->fields[2]->Value;

Table2->Append();
Table1->Next();
}

其中Table2->Append();语句用Table2->Post();语句代替过.
在程序运行完成后,DBGrid2中显示出了转换的数据,但SQL SERVER 2000数据库表内并没有数据,也就是数据提交没有完成.请问各位大虾,这是怎么回事?要用哪个命令才能将数据提交至数据库?课题期限马上就到了,急啊!!!
...全文
532 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
yxl_allen 2007-01-25
  • 打赏
  • 举报
回复
C++Builder如何将数据写入到sql server2000数据库:
1 首先在server2000建立数据库和数据库表。
2 利用c++Builder开发工具制作界面。在界面上拖放2个Label,命名为“学号”,“姓名”,2个Edit,其name分别为
EditNum,EditName;一个Button1按钮。
(加入我们的数据库表名为usertable ,字段只有2个,studentnum,studentname 类型都是varchar(10));
3 在界面上放置一个ADOConnection1 和一个ADOQuery1。设置ADOConnection1的connectionstring属性,单击...Build...
建立一个你要连接的数据库,测试连接成功就ok了。
4 设置ADOQuery1的Connection属性为ADOConnection1。
5 双击Button1按钮写程序:
if(EditNum->Text=="")
{
Application->MessageBoxA("请输入学号","系统提示",MB_OK);
return ;
}
if(EditName->Text=="")
{
Application->MessageBoxA("请输入学号","系统提示",MB_OK);
return ;
}
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("insert into usertable(studentnum,studentname) values(' "+EditNum->Text+" ',' "+ EditName->Text +" ')");
ADOQuery1->ExecSQL;
Application->MessageBoxA("成功写入数据库","系统提示",MB_OK);

仅供初学者使用,本人联系方式QQ:81705066,qq群号:4742532欢迎加入。
flowercity 2007-01-22
  • 打赏
  • 举报
回复
mark
fxhyhy 2007-01-18
  • 打赏
  • 举报
回复
大虾们都去休假了吗?怎么没人回啊.
fxhyhy 2006-12-31
  • 打赏
  • 举报
回复
TBatchMove控件怎么用?举个例子吧.我试了,没成功.谢谢各位大虾!!!
zhanghelpsgz 2006-12-23
  • 打赏
  • 举报
回复
Mark
laowang2 2006-12-23
  • 打赏
  • 举报
回复
TBathMove控件,还是用这个吧
fxhyhy 2006-12-22
  • 打赏
  • 举报
回复
而且,这段代码我在从ORACLE 7.3转换数据至ORACLE 9i时都通过了,没问题.就是在SQL SERVER 2000里才出这个问题.
fxhyhy 2006-12-22
  • 打赏
  • 举报
回复
用了,就是按你给的写的.可就是报错.
柯本 2006-12-22
  • 打赏
  • 举报
回复
不会吧.你用Table2->Edit();了吗?这个是必须的,将Table2设为Edit状态
其实你还可用Table2->AppendRecord的方法
fxhyhy 2006-12-22
  • 打赏
  • 举报
回复
不行,报错为:Table2:dataset not in edit or insert mode.
fxhyhy 2006-12-20
  • 打赏
  • 举报
回复
明天我试试,如果成功就给分!
柯本 2006-12-20
  • 打赏
  • 举报
回复
上面的链接打不开了.原文为:
问题:异构数据库之间完全可以用SQL语句导数据。大家抛弃BatchMove吧 如果觉得好请Up一下,如果觉得不好也请Up一下 ( 积分:1, 回复:603, 阅读:32905 )
分类:数据库-C/S型 ( 版主:qince, luyear )
来自:碧血剑, 时间:2003-3-18 16:33:00, ID:1691966 [显示:小字体 | 大字体]
告诉你一个最快的方法,用SQLServer连接DBF
在SQLServer中执行
SELECT * into bmk
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="e:\share";User ID=Admin;Password=;Extended properties=dBase 5.0')...bmk
这样就可以把e:\share中的bmk.dbf表导入到Sqlserver中,
速度是最快的
上面这个方法DBF文件必须在服务器上,如果DBF不在服务器上,就用
连接串
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp;Extended Properties="dBase 5.0;";Persist Security Info=False
SQL语句
SELECT * into aaa IN [ODBC]
[ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;]
from aaa
这是直接把客户端上的DBF传上服务器的最直接方法。

把压箱底的方法都告诉大家
在Form上放一个ADOConnection,连结指向目标Access库
比如txt文件在c:\temp\aaaa.txt
就执行
ADOConnection.Connected := True;
ADOConnection.Execute('Select * Into abcd From [Text;Database=c:\temp].aaaa.txt');
就一切Ok了,这个方法一定行的,我好不容易才研究出来的
有了这两个例子,异构数据库之间导数据的问题就举一反三,迎刃而解了。

把Excel导入到Access中,同txt类似
select * into <table name> from [excel 8.0;database=<filename>].[<sheetname>$]

我最讨厌别人用BatchMove导数据了,明明一个SQL的事情,偏要。。。
我的目标是让大家抛弃BatchMove

Provider=MSDASQL.1;Extended Properties="Driver={Microsoft Visual Foxpro Driver};SourceType=DBF;SourceDB=你的文件所在路径;"

整理一下:解决了,我用的cb
/*
功能 : Access To DBF
ADOConnection2 => Access
*/
sql = "SELECT * INTO jyjh in \"c:\\temp\"[dbase 5.0;] FROM jyjh";
ADOConnection2->Execute(sql);

c:\temp\aaa.dbf to Access,
ADOConnection 指向Access
语句是 select * into bbb from aaa in 'c:\temp' 'dbase 5.0;'

在Form上放一个ADOConnection,连结指向目标Access库
比如txt文件在c:\temp\aaaa.txt
就执行
ADOConnection.Connected := True;
ADOConnection.Execute('Select * Into abcd From [Text;Database=c:\temp].aaaa.txt');

将Oracle导入到文本文件
连接串
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp;Extended Properties="text;HDR=YES;";Persist Security Info=False
SQL语句
SELECT * into aaa.txt FROM Tab1 IN [ODBC]
[ODBC;Driver={Microsoft ODBC for Oracle};UID=oracle;PWD=oracle;SERVER=yourdata;]

将Oracle导入到Access
连接串
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp\db1.mdb;Persist Security Info=False
SQL语句
SELECT * into tablename FROM Tab1 IN [ODBC]
[ODBC;Driver={Microsoft ODBC for Oracle};UID=oracle;PWD=oracle;SERVER=yourdata;]

DBase 5.0
DBASE IV
FoxPro 3.0
Paradox 7.X
Excel 8.0
text;HDR=YES;FMT=Delimited

SELECT * into aaa
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="c:\temp\";User ID=Admin;Password=;Extended properties=Text')...[bb#txt]

Excel联接ADO串
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\temp\a.xls;Extended
Properties="Excel 8.0;HDR=Yes;";Persist Security Info=False
Extended Properties参数属性这样写 Excel 5.0;HDR=YES;IMEX=1
IMEX=1就是指混合型转换为文本
SQLServer从Excel取数
SELECT *
FROM OpenDataSource('Microsoft.Jet.OLEDB.4.0','Data Source="C:\temp\b.xls";Extended Properties="Excel 5.0;HDR=Yes;";Persist Security Info=False')...sheet1$

将SQLServer导入到文本文件
连接串
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp;Extended Properties="text;HDR=YES;";Persist Security Info=False
SQL语句
SELECT * into aaa.txt FROM Tab1 IN [ODBC]
[ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;]
要改变分隔符,可以修改
Schema.ini文件。该文件中指明分割符,如:
[yourfile.txt]
...
Format=Delimited(|)
更详细的例子可以参考:微软的Knowledge Base的文章:“Q149090 CC: How to Use Schema.ini for Accessing Text Data”和微软的Knowledge Base的文章:“Q187670 OWTO: Use RDO and ODBC Text Driver to Open a Delimited Text”。

txt导入SQLServer
select * from OpenRowset('MSDASQL', 'Driver={Microsoft Text Driver (*.txt; *.csv)};
DefaultDir=c:\temp;','select * from aaaa.txt')

sql server导出到access
ADOConnection 指向Access
SELECT * into table FROM Tab1 IN [ODBC]
[ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;]

sql server导出到excel
ADOConnection 指向excel, 用Jet4.0 ,Extended properties设为Excel 8.0
SELECT * into table FROM Tab1 IN [ODBC]
[ODBC;Driver=SQL Server;UID=sa;PWD=;Server=127.0.0.1;DataBase=Demo;]

insert into gds_order select * from gds_order
in [ODBC][ODBC;dsn=jbcmis;User Name=informix;password=informix;]

用SQLServer连接DBF
在SQLServer中执行
SELECT * into bmk
FROM OpenDataSource( 'Microsoft.Jet.OLEDB.4.0',
'Data Source="e:\share";User ID=Admin;Password=;Extended properties=dBase 5.0')...bmk
这样就可以把e:\share中的bmk.dbf表导入到Sqlserver中,

Access 到 Access
select * into aaa from aaa in 'c::\temp\b.mdb'
用ADOConnection.Execute执行

对foxpro 6.0采取odbc,建立一个数据源
insert into t_d(申请日期,发票序号,序号,申请号)
SELECT 申请日期,发票序号,序号申请号
from
OPENROWSET('MSDASQL',
'dsn=ddd;SourceDB=e:\d_pro\mail\poprec;SourceType=DBF'
,'select * from E:\d_pro\mail\poprec\d.dbf') as a --where 发票号 not in(select 发票号 from t_d)


柯本 2006-12-20
  • 打赏
  • 举报
回复
就你的方法来说,这样:
Table1->Ope();
Table2->Ope();
while (!Table1->Eof)
{
Table2->Append();
Table2->Edit();
Table2->Fields->Fields[0]->Value=Table1->Fields->Fields[0]->Value;
Table2->Fields->Fields[1]->Value=Table1->Fields->Fields[1]->Value;
Table2->Fields->Fields[2]->Value=Table1->Fields->Fields[2]->Value;
Table2->Post();
Table1->Next();
}
更简单的方法是用BDE的TBathMove控件
或使用:
http://www.delphibbs.com/keylife/iblog_show.asp?xid=19064
中的方法

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧