用vba如何使用sql
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用vba如何使用sql相关的知识,希望对你有一定的参考价值。
sql = "Select * FROM [Sheet1$]" 这是可以的,但我想把sheet1 和sheet2 中的a1 列进行关联,因为两个表的a列都是项目代码,请问怎么写SQL语句呢
sql = "Select * FROM [Sheet1$],[sheet2$] where [sheet1$a] = [sheet2$a] " 这个提示错误
一、界面设计
各控件名称属性分别为:label1 、text1 、label2、text2、commandok、cmdcancel
登录成功后显示的窗体:
代码设计如下:
'首先添加一个模块,写上以下通用声明和Sub main():
Public conn As ADODB.Connection '通用(声明)
Sub main()
Set conn = New ADODB.Connection '通用(main)
conn.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=False;" _
+ "User ID=sa;password=123;Initial Catalog=denglu;Data Source=127.0.0.1" '连接数据库代码
conn.Open
frmLogin.Show '首先显示登录界面。也可以在工程属性中设置启动对象为Sub main()或者frmlogin窗体
End Sub
'在Frmlogin 代码窗口,为cmdok控件写以下代码:
Private Sub cmdok_Click()
If text1.Text = "" Then
MsgBox "用户名不能为空!", vbOKOnly + vbInformation, "友情提示"
text1.SetFocus
Exit Sub '若用户名文本框内为空,则出现提示框
End If
If text2.Text = "" Then
MsgBox "密码不能为空!", vbOKOnly + vbInformation, "友情提示"
text2.SetFocus
Exit Sub '若输入密码文本框为空,也出现提示框
End If
Dim strSQl As String
strSQl = "select * from User1 where username='" & Trim$(text1.Text) & "' and pwd='" & Trim$(text2.Text) & "' "
'书写SQL代码,查询User1表中是否存在窗体中用户输入的信息。
Dim str As New ADODB.Recordset
Set str = New ADODB.Recordset
str.CursorLocation = adUseClient
str.Open strSQl, conn, adOpenStatic, adLockReadOnly
With str
If .State = adStateOpen Then .Close
.Open strSQl
If .EOF Then
Try_times = Try_times + 1
If Try_times >= 3 Then
MsgBox "您已连续三次输入错误,系统将自动关闭", vbOKOnly + vbCritical, "警告"
Unload Me '若用户连续输入3次错误密码,则系统关闭
Else
MsgBox "对不起,用户名不存在或密码错误 !", vbOKOnly + vbQuestion, "警告"
text1.SetFocus
text1.Text = ""
text2.Text = ""
End If
Else
Unload Me '若登录成功,则隐藏当前窗体
Form2.Show '然后显示Form窗体
End If
End With
End Sub
Private Sub cmdCancel_Click()
End '若单击Cmdcel按钮,则结束应用程序
End Sub
运行中存在的问题:
代码中有Dim conn As adodb.connection,运行时显示"用户定义类型未定义"
解决方法:点击“工程”--“引用”找到“Microsoft ActiveX Data Object 2.6”
然后就就可以正常运行了。
参考技术A 建议你看看这条知识,你的弱项在SQL语句上,http://zhidao.baidu.com/question/506663998.html追问
语法知道的 不会运用到vba
追答试下 [sheet1$].[a1]=[sheet2$].[a2]
本回答被提问者和网友采纳 参考技术B Dim conn As New ADODB.ConnectionconnStr = "Driver=SQL Server;DataBase=test;Server=(local);UID=sa;PWD=123"conn.Open connStr '连接数据库Dim rs As New Recordsetsql = "select * from a" '查看表ars.Open sql, conn, 3, 3if Not rs.EOF then For iCols = 0 To rs.fields.Count - 1 Sheets(1).Cells(1, iCols + 1).Value = rs.fields(iCols).Name Next iCols Sheets(1).Cells(2, 1).CopyFromRecordset rsendif追问怎么看起来这么复杂
格式乱 看不懂
如何在 VBA 中获取 Select SQL 语句的结果
【中文标题】如何在 VBA 中获取 Select SQL 语句的结果【英文标题】:How do I get the result of a Select SQL statement in VBA 【发布时间】:2017-08-18 15:16:54 【问题描述】:我希望能够使用 SQL 从表中检索数据并显示到 Access 中的即时窗口。
我是 VBA 新手,但我似乎找不到方法
Dim strSQL As String
Dim cdb As DAO.Database
Dim result As Variant
strSQL = "SELECT x, from y WHERE z;"
Set cdb = CurrentDb
Debug.Print strSQL
result = Call cdb.Execute(strSQL)
Debug.Print result
【问题讨论】:
Execute
不是这样做的正确方法。您需要使用 Recordset
对象让它返回一组数据。此外,在您的选择语句中删除 x
之后的逗号。 msdn.microsoft.com/en-us/library/bb243789(v=office.12).aspx
Execute
返回一个Recordset
对象,所以需要Set results = connection.Execute(sql)
,然后迭代返回的记录。该站点上数千个地方提供了大量帮助和示例。您是否尝试过搜索?
不执行(sql),Dim result AS DAO.Recordset
然后Set result = CurrentDb.OpenRecordset(strSQL)
【参考方案1】:
仅从第一条记录打印字段值。
Dim strSQL As String
Dim result As DAO.Recordset
strSQL = "SELECT x FROM y WHERE z;"
Set result = CurrentDb.OpenRecordset(strSQL, dbOpenDynaset)
Debug.Print result!x
如果您想从每条记录中打印一个值,请使用循环结构移动到每条记录,例如:
Do While Not result.EOF
Debug.Print result!x
result.MoveNext
Loop
查看此站点http://allenbrowne.com/tips.html - 查看大约一半的“图书馆示例”部分。
【讨论】:
【参考方案2】:要只用一行生成结果(假设只返回一条记录),您可以使用:
Debug.Print CurrentDb.OpenRecordset("SELECT x FROM y WHERE z").Fields(0).Value
您还可以使用 DLookUp 函数,它不是 SQL,但您会识别部分:
Debug.Print DLookUp("x", "y", "z")
【讨论】:
【参考方案3】:使用 With 语法的替代方法 ..
Dim Cnt as Long
With CurrentDb.OpenRecordset("SELECT Count(*) FROM MyTable WHERE X=2")
If Not .EOF Then
Cnt = .Fields(0).Value
End If
End With
【讨论】:
以上是关于用vba如何使用sql的主要内容,如果未能解决你的问题,请参考以下文章
如何在 VBA 中使用 SQL 将两个工作簿与一个公共列合并
如何使用 Authentication = ActiveDirectoryInteractive 从 VBA 连接到 Azure SQL DB?
如何使用查询或 VBA 和 SQL 更新 MS ACCESS 中的表
如何使用 VBA 动态 SQL SELECT 语句调用 MS Access 参数查询