我试图在Excel中编写一些vba代码来查询Access中的表.我已经为此尝试了多个代码示例,例如添加的链接,它们似乎都在"打开连接"部分失败了.我试过使用不同的引用,但我不确定我应该使用哪些,不同版本之间的区别是什么(即Microsoft ActiveX Data Objects 2.0,2.1,...,6.0)或提供者信息是什么应该.对于提供者信息,我通常会看到类似的东西
"Provider = Microsoft.Jet.OLEDB.4.0;数据源="
但我不确定这是否是我需要使用的,或者为什么/上面显示的提供程序字符串中的任何内容应该更改.有人可以教我如何正确地做这种事吗?
注意:如果可能的话,我想要一个无需下载任何其他应用程序即可运行的解决方案,并且适用于2007和2010版本的Access和Excel,因为这需要在具有可能不同版本的办公室的不同计算机上运行.
类似问题的链接: 要访问的Excel VBA查询失败 http://www.mrexcel.com/forum/showthread.php?t=527490
码:
Sub asdf()
strFile = "C:\Users\bwall\Desktop\Excel Query Access Testing"
Dim cn As Object
Dim rs As Object
Dim strSql As String
Dim strConnection As String
Dim AppPath As String
Set cn = CreateObject("ADODB.Connection")
AppPath = Application.ActiveWorkbook.Path
strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & AppPath & "\Masterlist_Current_copy.accdb;"
Debug.Print strConnection
strSql = "SELECT [Neptune Number],[Description],[Manufacturer],[Manufacturer P/N] FROM [All Components];"
cn.Open strConnection
Set rs = cn.Execute(strSql)
MsgBox rs.Fields(0) …Run Code Online (Sandbox Code Playgroud) 目的:
此查询的目的是选择一列中不存在于不同表中的类似列中的所有不同值.
当前查询:
SELECT DISTINCT Table1.Column1
FROM Table2, Table1
WHERE Table1.Column1 <> Table2.Column1
Run Code Online (Sandbox Code Playgroud)
查询结果:
当我尝试运行此查询时会发生什么事情,进度条几乎立即填满,然后它几乎冻结,并且我没有做任何其他事情.当我使用=符号而不是<>时,它会输出相等的值,如果我将Table2.Column1替换为实际的实际值,它就可以正常工作.
我只是在输入这个问题时再次运行它,上面的查询这次给了我一个答案,但是它具有列的所有DISTINCT值,并不是所有值都是唯一的那样的表.
关于我在这里做错了什么或遗失的任何想法?
在VB.NET中,一旦开始输入,IntelliSense就会弹出,这会为您提供当时可以使用的完整列表.但是,在您使用的部件之后放置一段时间后,VBA中的IntelliSense 不会启动.例如,我进入Excel 2007中的VBA编辑器并开始输入单词" Range"但是在我键入" Range." 之前智能感知不会出现,之后它会给我一个我可以在那时使用的列表.
有没有什么办法让智能感知拿出早在VBA编辑器,让我能看到,可以像使用的东西的清单Davg,DCount等等?
我有一个访问程序正在使用一些链接的ODBC表.我原来有一个包含以下INNER JOIN的查询:
FROM Neptune_FN_Analysis
INNER JOIN Neptune_prem ON Neptune_FN_Analysis.PremID = Neptune_prem.premice_id
Run Code Online (Sandbox Code Playgroud)
这个工作正常,直到Neptune_prem.premice_id列从数字更改为文本数据类型.所以现在我需要一种方法在两列上使用INNER JOIN,一个是数字,另一个是文本.
请记住,我不能简单地更改链接的ODBC表正在查看的表中的数据类型.
如果这是不可能的或一定数量的代码我的另一个逻辑选项是进行查询以创建一个本地表,我可以使用Neptune_FN_Analysis表中的所有相同数据编辑,并在该查询之后的代码中编辑列I我正在加入以输入文字.如果它是合理的,我宁愿只修改这个SQL查询.
我有3个表:NotHeard,分析,分析2.在每个表中,我有两列名为UnitID和Address.
我现在要做的是选择未显示在分析或分析2中的UnitID和Notheeard地址列的所有记录.我创建的SQL语句如下:
SELECT UnitID, Address
INTO [NotHeardByEither]
FROM [NotHeard]
Where NOT EXISTS( Select analyzed.UnitID FROM analyzed WHERE [NotHeard].UnitID = analyzed.UnitID)
or NOT EXISTS( Select analyzed2.UnitID FROM analyzed2 WHERE [NotHeard].UnitID = analyzed2.UnitID)
Group BY UnitID, Address
Run Code Online (Sandbox Code Playgroud)
我认为这样可行,因为我使用了单个NOT EXISTS子查询行,它在过去对我来说效果很好.然而,上面的查询返回NotHeard表中的相同数据,而如果我取出或NOT EXISTS部分它可以正常工作.
关于我做错了什么或如何做我想做的事情的任何想法?
我正在向为在 Windows CE 上使用而创建的程序添加代码。我当前的问题是 Application.StartupPath 无法识别。我需要使用的等效代码行是什么?
我试图创建一个if语句,如果任何条件为真,将执行一个动作.我需要测试的项目是八个文本框的文本值.我现在所拥有的是以下内容,它给我的错误是"运营商'||' 不能应用于'string'和'string'类型的操作数.
if (textbox1.text = "" || textbox2.text = "" || ...... and so on)
Run Code Online (Sandbox Code Playgroud)
如果有人知道我应该如何写这个if语句或一个简单的方法来检查是否存在已知位置的.ini文件.要么适合我.
我有一个名为“Form1.cs”的表单,它调用一个我们称之为“Class1.cs”的类,以及另一个名为“Form2.cs”的表单。如果窗体处于打开状态,Class1 中的子例程需要更新 Form2 中的文本框。文本需要在附加到文本框中的当前文本后出现,以便实时更新。我不知道如何进行这项工作。我尝试了很多东西,他们没有给我错误,但他们也没有将文本写入文本框。
这里的每个请求是我当前的代码。请记住,这是一个测试项目,用于在将其实施到真正的项目之前弄清楚这一点。
Form1.cs 中的代码
namespace Test
{
public partial class Form1 : Form
{
Form2 cs_form2 = new Form2();
Class1 cs_class1 = new Class1();
public Form1()
{
InitializeComponent();
}
public void button1_Click(object sender, EventArgs e)
{
cs_class1.Writelog();
}
private void Form1_Load(object sender, EventArgs e)
{
cs_form2.Show();
}
public void writeToTextbox()
{
i = 0;
while(i<=10)
{
cs_form2.testTextBox.AppendText("still works");
i++;
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
Form2.cs 中的代码
namespace Test
{
public partial class Form2 : Form
{
public Form2() …Run Code Online (Sandbox Code Playgroud) 我在ms-access中运行sql时遇到问题.即时通讯使用此代码:
SELECT readings_miu_id, ReadDate, ReadTime, RSSI, Firmware, Active, OriginCol, ColID, Ownage, SiteID, PremID, prem_group1, prem_group2
INTO analyzedCopy2
FROM analyzedCopy AS A
WHERE ReadTime = (SELECT TOP 1 analyzedCopy.ReadTime FROM analyzedCopy WHERE analyzedCopy.readings_miu_id = A.readings_miu_id AND analyzedCopy.ReadDate = A.ReadDate ORDER BY analyzedCopy.readings_miu_id, analyzedCopy.ReadDate, analyzedCopy.ReadTime)
ORDER BY A.readings_miu_id, A.ReadDate ;
Run Code Online (Sandbox Code Playgroud)
在此之前,我根据某些标准从其他表中填写analyzeCopy表.对于一组标准,这段代码工作正常,但对于其他人,它一直给我运行时错误'3354'.我能看到的唯一不同之处在于,根据可行的标准,该表大约有4145条记录长,而使用此代码的表格不起作用的条件长度超过9000条记录.有什么建议?
是否有任何方法告诉它只拉出一半的信息,然后在表格的另一半上运行相同的选择字符串,并将这些结果添加到上半年的前一个结果中?
运行时错误"3354"的全文是"此子查询最多可以返回一条记录".
我只是尝试在前4000条记录上运行此查询,并且它再次失败并使用相同的错误代码,因此它不能是我想到的记录数量.
ms-access ×4
sql ×4
c# ×3
vba ×3
access-vba ×1
excel ×1
intellisense ×1
join ×1
not-exists ×1
windows-ce ×1
winforms ×1