用过access链接表的请进来看一看,请高手指点?(75分)

  • 主题发起人 主题发起人 Imfish
  • 开始时间 开始时间
I

Imfish

Unregistered / Unconfirmed
GUEST, unregistred user!
我在本地access中用了链接表的方法。可是每次放进数据,便出现连接错误。
下面是我的做法:
在Access中选择“表”页,右键单击空白部分,选择链接表,通过ODBC链接SQL数据库,
并指定相关表名。这样就可以在Access中像操作本地Access表一样操作Sql Server表了。
大量添加数据采用语法(注意是一句Sql):
insert into Sqlserver链接表表名 select * from Access本地表表名
在程序中我是这样写的:
with moduleform do
begin
localquery.Close;
localquery.SQL.Clear;
localquery.SQL.Add('insert into dbo_jchj select * from jchj ');
localquery.Open;
end;
请高手指点,送上75分
 
你的SQL server数据库打开了吗?是不是真的连接上了?
 
to 来如风
打开了呀,可是总是出现错误,请你继续关注
 
具体信息是什么?
 
如下:
”odbc-连接到‘fardata’失败“
fardatao为我建的用户dsn名称
在链接表中我是用的机器数据源
 
那你在Access中手动连接成功了?
那么不执行SQL语句看看,就是直接在access中对表进行操作,如果可以的话那的确应该
没有问题了
 
可以手动对其添加数据
请指点
另外,我的语句写的应该没有问题吧
 
如果可以手动添加的话那你直接向你的access中写如数据呢?
也许你的sql语句有问题,
这些东西要自己多测试,方法很多
比如说你可以在access中直接运行这个sql语句看是否可以等等方法
我平时碰到这些情况一般都是分布排除可能出错的地方只至成功,最后再做优化工作
 
with moduleform do
begin
localquery.Close;
localquery.SQL.Clear;
localquery.SQL.Add('insert into dbo_jchj select * from jchj ');
//localquery.Open;
更改为localquery.execsql;
end;
 
首先肯定要用 execsql

其次看看连接是否正常。
也有可能 Access 不支持这样的 SQL
'insert into dbo_jchj select * from jchj '
加上括号试试:
'insert into dbo_jchj (select * from jchj)'


 
同意 ty_unix
 
To all:
这个问题我已经改了,但是问题依旧,请大家关注,谢谢
 
通过ODBC,ACCESS下的SQL语句直接就可对SQL SERVER数据进行操作,不需再用到链接表

参考
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1291308
 
TO quicksliver:
谢谢你的回答,但是在执行时出现错误如下:
‘调用错误’
这是怎么回事?
 
首先要确保连接没有问题,可以用一个DbGrid 显示一下数据。
其次你的表是不是已经存在。是否已经连接数据库?
用的是BDE还是ADO

Access 2000 是支持这种语法的,应该没有问题!

INSERT INTO 语句
添加一个或多个记录至一个表。这叫作追加查询.

语法
多重记录追加查询:

INSERT INTO target [(field1[, field2[, ...]])][IN外部数据库]
SELECT field1[, field2[, ...]]
FROM tableexpression

单一记录追加查询:

INSERT INTO target [(field1[, field2[, ...]])]
VALUES (value1[, value2[, ...])

INSERT INTO 语句可分为以下几个部分:

部分 说明
target 欲追加记录的表或查询的名称。
field1, field2 如果后面跟的是 target 参数,则为要追加数据的字段名;如果后面跟的是 source 参数,则为从其中获得数据的字段名。
Externaldatabase 进入外部数据库的路径。有关路径的描述,请参阅 IN 子句。
source 复制记录的来源表或查询的名称。
tableexpression 从其中得到要插入的记录的表名。这个变元可能是一个单一的表名,也可能是一个由 INNER JOIN, LEFT JOIN或 RIGHT JOIN 运算组成的复合体,或是一个储存的查询。
value1,value2 欲插入新记录的特定字段的值。每一个值将依照它在列表中的位置,顺序插入相关字段:value1 将被插入至追加记录的 field1 之中,value2 插入至 field2,依此类推。必须使用逗点将这些值分隔,并且将文本字段用引号 (' ') 括起来。


说明
可以使用 INSERT INTO 语句来添加一个单一记录至一个表中,如以上所示使用单一记录追加查询语法。在这个例子中,代码指定了该记录每一字段的名称和值。必须指定追加数值的记录的每一个字段和那个字段的值。如果您没有指定每一个字段时,缺省值或 Null 值将被插入至没有数据的字段之中。这些记录将被添加至表的尾部。

通过使用 SELECT ...FROM 子句如以上所示的多重记录追加查询语法,也可以从另一表或查询使用 INSERT INTO追加一组记录。在这个示例中,SELECT 子句将指定追加字段至指定的 target 表。

source 或 target 表可以指定一个表或查询。如果查询被指定,Microsoft Jet数据库引擎会把记录追加到由该查询指定的所有表中。

INSERT INTO 是可选的,但当使用时,请置於 SELECT 语句之前。

如果你的目标表包含一个 主键,,你一定要把唯一的非 Null 值追加到主键字段中,否则 Microsoft Jet 数据库引擎不会追加记录。

如果你要把把记录追加到带有 AutoNumber字段的表中,还想重编追加的记录,请不要在你的查询中包含 AutoNumber字段。如果您要保持字段中的原始值,请将自动编号加在您的查询之中。

使用 IN 子句,可追加记录至另一个数据库中的表。

要创建新表请用 SELECT...INTO 语句代替制表查询的创建。

若要在运行追加查询之前找出哪些记录是被追加的,首先执行和查阅一个使用相同的选择条件之选定查询所获得的结果。

追加查询为从一个或多个表中复制记录至另一个表。您追加的表包含记录将不会被追加查询所影响。

除了从另一表中来追加现存的记录,可以指定在单一追加记录之中使用 VALUES 子句来指定对每一字段的值。如果您省略字段列表,VALUES 子句在表之中必须包含每一字段的值;否则, INSERT运算将会失败。使用额外的 INSERT INTO 语句与一个 VALUES 子句来创建您要的每一个额外的记录。



INSERT INTO 语句示例

此示例选择在一假设的新客户表中的所有记录,并且增加它们至客户表中。当个别的栏没有设计时,此 SELECT 表的列名必须完全地符合那些在 INSERT INTO 表中的列名。

Sub InsertIntoX1()


Dim dbs As Database


' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 对运费超过 $100 的订单,



' 在新客户表中选择所有记录,

' 并且添加它们至客户表。

dbs.Execute " INSERT INTO Customers " _

& "SELECT * " _

& "FROM [New Customers];"



dbs.Close


End Sub

此示例创建在员工表中的添加记录。

Sub InsertIntoX2()


Dim dbs As Database


' 在您的计算机中修改此行使其正确指到 Northwind 的路径。

Set dbs = OpenDatabase("Northwind.mdb")

' 对运费超过 $100 的订单,



' 创建在员工表中的新记录,

' 其姓氏是 Washington,名字是 Harry,

' 并且职称是 Trainee。

dbs.Execute " INSERT INTO Employees " _

& "(FirstName,LastName, Title) VALUES " _

& "('Harry', 'Washington', 'Trainee');"



dbs.Close


End Sub


 
多人接受答案了。
 

Similar threads

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