| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1219 人关注过本帖
标题:请各位大大帮我看看这段代码出了什么问题?
只看楼主 加入收藏
wjq09
Rank: 2
等 级:论坛游民
帖 子:69
专家分:20
注 册:2011-1-2
结帖率:60%
收藏
已结贴  问题点数:20 回复次数:7 
请各位大大帮我看看这段代码出了什么问题?
程序代码:
Dim PictureDiskFile As String
Dim PictureName As String
Private Sub Command1_Click()
    CommonDialog1.Filter = "图片文件(*.JPG;*.BMP;*.GIF)|*.jpg;*.bmp;*.gif"
    CommonDialog1.ShowOpen
    PictureDiskFile = CommonDialog1.FileName
    PictureName = CommonDialog1.FileTitle
    If PictureDiskFile = "" Then
        Exit Sub
    End If
    FileNumber = FreeFile
    Open PictureDiskFile For Binary Access Read As FileNumber
    PictureFileLength = LOF(FileNumber)
    If PictureFileLength = 0 Then
    Close FileNumber
    MsgBox PictureDiskFile & "无内容或不存在!"
    End If
    Picture1.Picture = LoadPicture(PictureDiskFile)
    Close FileNumber
End Sub

Private Sub Command2_Click()
    FileCopy PictureDiskFile, App.Path & "\picture"
    PicturePath = App.Path & "\picture"
    Dim ADOrs As New Recordset
    Set ADOrs.ActiveConnection = ADOcn
    ADOrs.Open "Insert into ImageTable2(ImageName,ImagePath) Values(PictureName,PicturePath)"
    ADOrs.Update
End Sub
图片附件: 游客没有浏览图片的权限,请 登录注册

是这一行报错ADOrs.Open "Insert into ImageTable2(ImageName,ImagePath) Values(PictureName,PicturePath)"

[此贴子已经被作者于2016-5-16 09:30编辑过]

2016-05-16 09:29
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:5 
    ADOrs.Open "Insert into ImageTable2(ImageName,ImagePath) Values(PictureName,PicturePath)"

二个问题。
1、执行非查询SQL命令不是使用这种方法。也许这种方法可行。
2、SQL命令有问题。

先说第一个问题。
执行SQL命令。你先看 MSDN的帮助。
---------------------
Execute 方法 (ADO Connection)
执行指定的查询、SQL 语句、存储过程或提供者特有的文本。

语法
对于不是以行返回的命令字符串:

connection.Execute CommandText, RecordsAffected, Options
对于以行返回的命令字符串:

Set recordset = connection.Execute (CommandText, RecordsAffected, Options)
返回值
返回 Recordset 对象引用。

参数
CommandText
String 值,包含要执行的 SQL 语句、存储过程、URL 或提供者特有的文本。此外,仅当提供者被 SQL 识别时才可使用表名称。例如,如果使用“Customers”作为表名称,则 ADO 将自动预先根据标准 SQL Select 语法构成“SELECT * FROM Customers”,并将其作为 T-SQL 语句传递给提供者。
RecordsAffected
可选。Long 变量,提供者向其返回操作影响的记录数目。
Options
可选。Long 值,指示提供者计算 CommandText 参数的方式。该值可以是一个或多个 CommandTypeEnum 或 ExecuteOptionEnum 值的位掩码。
注意   使用 ExecuteOptionEnum 的 adExecuteNoRecords 值,通过使内部处理最小化来提高性能。
不要将 CommandTypeEnum 的 adCmdFile 或 adCmdTableDirect 值与 Execute 一起使用。这些值仅可用作 Recordset 的 Open 和 Requery 方法的选项。
说明
使用 Connection 对象的 Execute 方法可以执行在指定连接的 CommandText 参数中传递给该方法的查询。如果 CommandText 参数指定按行返回的查询,那么执行产生的任何结果都将存储在新的 Recordset 对象中。如果此命令不用于返回结果(如 SQL UPDATE 查询),则只要指定了 adExecuteNoRecords 选项,提供者就将返回 Nothing;否则,Execute 将返回已关闭的 Recordset。

返回的 Recordset 对象始终是只读的、仅向前的游标。如果需要具有更多功能的 Recordset 对象,应先创建具有所需属性设置的 Recordset 对象,然后使用 Recordset 对象的 Open 方法执行查询并返回所需的游标类型。

CommandText 参数的内容是提供者特有的,可以是标准的 SQL 语法或提供者支持的任何特殊命令格式。

此操作结束时将发出 ExecuteComplete 事件。

----------------------
在这里,建议你应该使用
ADOcn.Execute  SQL命令
这样来执行 非查询SQL命令,当然这个命令也会返回一个只读向前的 Recordset ,你要用来执行查询也是可以的。

第二个问题。
SQL命令错误了。

"Insert into ImageTable2(ImageName,ImagePath) Values(PictureName,PicturePath)"
用双引号引起来的是字符串,原样输出。而你这里面,PictureName 和 PicturePath 明显是二个变量。应该使用连接字符串的方式生成 SQL
感觉应该是改为:
dim sql as string
sql="Insert into ImageTable2(ImageName,ImagePath) Values('" & PictureName & "','" & PicturePath "');"
然后再用第一个方法执行,当然你用你的方法试着能否执行也是可以的,值得你去试。
ADOcn.Execute  SQl


授人于鱼,不如授人于渔
早已停用QQ了
2016-05-16 09:52
wjq09
Rank: 2
等 级:论坛游民
帖 子:69
专家分:20
注 册:2011-1-2
收藏
得分:0 
回复 2楼 风吹过b
ADOrs(RecordSet对象)能执行Execute方法吗

[此贴子已经被作者于2016-5-16 11:21编辑过]

2016-05-16 10:56
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
以下是引用wjq09在2016-5-16 10:56:19的发言:

ADOrs(RecordSet对象)能执行Execute方法吗


我没用过。
执行SQL命令,我都是用连接。
RecordSet 我只是用来打开有结果的 SQL查询 命令。
凡是 更新、插入、删除、建表 、删表命令,都不会用它。没有结果或返回关闭的对像,结果都没啥用,为什么要用它。

你先按第二个问题改正测试下就知道了。这个问题我也不知道答案。

授人于鱼,不如授人于渔
早已停用QQ了
2016-05-16 11:54
ZHRXJR
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:125
帖 子:1034
专家分:5519
注 册:2016-5-10
收藏
得分:5 
PictureName 是你得到的文件名+扩展名,不是仅仅是文件名,要得到文件名,必须处理一下:
PictureName = Left(PictureName,Len(PictureName)-4),这样就得到了文件名,不包含扩展名(仅仅是扩展名是三个字符的加一个英文逗点,一共四个字符)。
我想应该是这个问题引起的。

请不要选我!!!
2016-05-16 14:32
wjq09
Rank: 2
等 级:论坛游民
帖 子:69
专家分:20
注 册:2011-1-2
收藏
得分:0 
回复 4楼 风吹过b
我照第二种方法改了SQL语句,存取数据成功了,但运行到ADOrs.Update又提示这个
图片附件: 游客没有浏览图片的权限,请 登录注册
图片附件: 游客没有浏览图片的权限,请 登录注册
2016-05-16 16:07
hjxlj
Rank: 10Rank: 10Rank: 10
来 自:江西
等 级:贵宾
威 望:14
帖 子:292
专家分:1519
注 册:2013-6-25
收藏
得分:5 
实在不行,加我QQ吧,我给你远程一下

本人QQ:775420425
2016-05-16 17:39
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
说明 RecordSet 对象,不能执行 除 查询以外的其他SQL 命令。
那么你得按问题一再改正。


授人于鱼,不如授人于渔
早已停用QQ了
2016-05-16 18:42
快速回复:请各位大大帮我看看这段代码出了什么问题?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.062494 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved