我正在寻找与SQL Server的COALESCE功能等效的Access 2007.
在SQL Server中,您可以执行以下操作:
人
John
Steve
Richard
Run Code Online (Sandbox Code Playgroud)
SQL
DECLARE @PersonList nvarchar(1024)
SELECT @PersonList = COALESCE(@PersonList + ',','') + Person
FROM PersonTable
PRINT @PersonList
Run Code Online (Sandbox Code Playgroud)
产生:约翰,史蒂夫,理查德
我想在Access 2007中做同样的事情.
有谁知道如何在Access 2007中组合这样的行?
我开发了一个Access 2007数据库,它连接到SQL Server以进行实际的数据存储.我使用了Package Solution Wizard创建了一个可分发的安装程序,其中包括访问运行时(带有ACCDE文件),我在15台左右的PC上安装了这些安装程序.无论如何,我的问题是,将更新分发到这个数据库的最佳方法是什么?现在我需要到处移除并重新安装.这不是问题......我只是想知道是否还有其他办法.
我已经尝试将前端留在网络共享上,但似乎大多数人建议将前端存储在本地计算机上,这是有道理的.我把它留在网络共享上时遇到的问题(至少使用Access 2003 mdbs)是我发现自己需要经常压缩和修复,我还必须杀死打开的会话(打开文件的用户)升级时.我想如果用户不在本地网络上,它也可能会假设产生不必要的瓶颈.
我有一个MS Access数据库(无法忍受),并通过PHP(ODBC)与它通信.
我必须在INSERT语句中包含一个DateTime字段.此字段在Access中未定义为"必需",这意味着它确实可以为NULL,并且实际上Access数据库中的某些行已经为NULL.
我遇到的问题很简单:如何通过SQL插入NULL?我在网上找到的所有结果都是从Visual Basic或C#中解决的,而我在PHP中通过ODBC使用SQL.
我已经尝试过以下方法:
INSERT INTO table_name (datetime_field) VALUES (NULL)
INSERT INTO table_name (datetime_field) VALUES (#NULL#)
INSERT INTO table_name (datetime_field) VALUES ('NULL')
INSERT INTO table_name (datetime_field) VALUES ('#NULL#')
INSERT INTO table_name (datetime_field) VALUES ('')
Run Code Online (Sandbox Code Playgroud)
(我的查询中还有大约30个其他列.)
当我尝试''或NULL时,我得到的确切错误是'条件表达式中的数据类型不匹配'.其他人返回解析错误(可以理解).
请注意,我必须在INSERT语句中包含该字段.该字段具有默认值,但在许多情况下,我正在传输的原始数据具有NULL,在目标数据库中也必须为NULL.
提前致谢!
我正在查询MsysObjects表,以便列出我数据库中的对象:
SELECT MsysObjects.Name, MsysObjects.Type
FROM MsysObjects
WHERE (((Left$([Name],1))<>'~') AND ((Left$([Name],4))<>'Msys'))
ORDER BY MsysObjects.Name;
Run Code Online (Sandbox Code Playgroud)
我知道这个值的含义:
-32768 = Form
-32766 = Macro
-32764 = Report
-32761 = Module
1 = Table
5 = Query
6 = Linked Table
Run Code Online (Sandbox Code Playgroud)
但是-32758,-32757和3呢?他们代表哪里?无法在网上找到它.
使用其中一个新排序顺序创建的数据库即使安装了Service Pack 2(SP2)也无法在Access 2007中打开.
我的插入声明是:
INSERT INTO myTable (inst_id,user_id,app_id,type,accessed_on)
VALUES (3264,2580,'MyApp','Renew',Now);
Run Code Online (Sandbox Code Playgroud)
...所有值都正确格式化的地方.该表具有上述字段和另一个,长int自动增量键字段.外键是'inst_id','user_id'和'app_id'.
我从Access收到此错误: 
...以及错误输出时VS 2005中的以下错误:
System.Data.OleDb.OleDbException:您向表请求的更改未成功,因为它们将在索引,主键或关系中创建重复值.更改包含重复数据的字段或字段中的数据,删除索引或重新定义索引以允许重复条目,然后重试.
在进行此插入查询时,我可以查看数据库并查看每个外键值是否存在于各自的表中并且已经持续数月(对于我正在使用的特定示例).这些字段也设置为我可以有重复,所以这不是问题.在其他表格中这种性质的呼叫效果很好.我不需要在插入查询中提供自动增量键值,它会自动为我添加(就像它应该).
奇怪的是,如果我在我的代码中这样做:
try
{
//Execute the query here...
}
catch
{
//Execute the same query again
}
Run Code Online (Sandbox Code Playgroud)
...或者如果我只是尝试在Access中执行两次,它就可以了.
有没有人遇到过这个?同样,这种类型的插入适用于其他表,所有外键都存在于它们各自的表中,该表的主键设置为'自动增量',所有字段(当然不是主键字段)是设置为允许重复.
有任何想法吗?
编辑:插入前最大的密钥:343085.插入后最大的键:343086.格式为:
id: AutoNumber (Field Size=Long Interger, New Values=Increment, Indexed=Yes - No Duplicates)
inst_id: Number (Field Size=Long Interger, Required=Yes, Indexed=Yes - Duplicates OK)
user_id: Number (Field Size=Long Interger, Required=Yes, Indexed=Yes - Duplicates OK)
app_id: Text (Field Size=255, Required=Yes, Indexed=Yes - Duplicates OK)
type: Text …Run Code Online (Sandbox Code Playgroud) 我有一个情况,我有一个名为Gas Flow Rates的Access表,我想添加记录.当我尝试为类似的表Common Station运行插入查询时,出现以下错误:
"错误hy000:语法错误,在查询不完整查询子句中"
代码是:
using System;
using System.Data.Odbc;
class MainClass
{
static void Main(string[] args)
{
string connectionString = "Dsn=Gas_meter";
string sqlins = "";
OdbcConnection conn = new OdbcConnection(connectionString);
OdbcCommand cmdnon = new OdbcCommand(sqlins, conn);
conn.Open();
try
{
cmdnon.CommandText = "INSERT INTO 'Common station' ( S1Flow, S2Flow, S3Flow, S4Flow) VALUES (9999,999, 999, 999)";
//Once the above line works replace it with cmdnon.CommandText= "INSERT INTO Gas Flow Rates ( S1Flow, S2Flow, S3Flow, S4Flow) VALUES (9999,999, …Run Code Online (Sandbox Code Playgroud) 任何人都可以解释之间的差异DAO.Recordset,DAO.Recordsets以及DAO.Recordset2在MS Access 2007?基本上使用记录集....举一个例子,使其更清晰.我从帮助选项中找到了一些参考资料,但我不清楚它的过程......
我正在使用SQL Server迁移助手(SSMA)将Access数据库迁移到SQL Server.将继续使用Access应用程序,但使用链接表而不是本地表.
我在迁移后测试期间遇到了一个问题,其中包含一些包含多个子表单的表单.
测试步骤:
1)编辑主窗体中的字段;
2)将焦点转移到子表单中的字段;
3)尝试编辑子表单中的字段.
结果:弹出一条错误消息:"数据已更改.另一位用户编辑了此记录并在您尝试保存更改之前保存了更改."
一旦错误消息被解除,可以编辑子表单中的字段.如果未编辑主窗体中的字段,则可以编辑子窗体而不显示错误消息.
有关可能导致此错误的原因的任何想法?
我已经尝试在主窗体上的子窗体控件的Enter事件处理程序中保存主窗体记录(即,当输入包含子窗体的控件时,此事件发生在主窗体上,而不是在子窗体本身上) .没有任何区别.我尝试在相同的子窗体控件Enter事件中重新查找主窗体,但这不起作用 - 重新查找主窗体将焦点移离子窗体,因此无法编辑.
MS论坛在子表单的After_Update事件中建议了Me.Parent.Requery.那也行不通.
当我进入子表单时,SQL事件探查器显示单个更新语句,更新主表单下的表.没有其他声明命中数据库来修改数据.
我注意到一件有趣的事情:主窗体的Record Source实际上是一个将两个表连接在一起的select语句.主窗体包含可以更新记录源中每个表中的列的字段.在主窗体中编辑更新关系中子表的字段不会导致"数据已更改"错误.只有在编辑更新关系中父表的字段时才会出现此错误.我已经尝试过更新两个表中每个表中不同列的字段.结果是一致的:编辑父表中的记录会导致错误,编辑子表中的记录则不会.
子表单和主表单之间的链接将子表单表中的列连接到主表单的记录源中的子表中的列.
顺便说一下,主窗体Record Source中的表实际上是以1:1的关系连接的(子表中的一条记录用于父表中的每条记录).子表只是父表的扩展表.
如果我从头开始,我个人不会设计这样的系统,但这是我必须使用的,我希望有一些相当简单的解决方案,不需要重新设计表格或表格(给定主要形式和子形式每个都有超过100个控件).
我对VBA气氛完全陌生.我试图将这条线分成多行,但我失败了.有人可以帮我把这段代码分成多行吗?
DoCmd.RunSQL "UPDATE INDIVIDUAL SET INDIVIDUAL.INDI_FIRSTNAME = '" & prospect_contact!FirstName & "', INDIVIDUAL.INDI_LASTNAME = '" & prospect_contact!LastName & "', INDIVIDUAL.INDI_TEL = '" & prospect_contact!BusinessTelephone & "', INDIVIDUAL.INDI_ADDRESS1 = '" & Replace(prospect_contact!Street, "'", "") & "', INDIVIDUAL.INDI_ADDRESS2 = '" & Replace(prospect_contact!Street1, "'", "") & "', INDI_STATUS = '" & pro & "',INDIVIDUAL.INDI_FUNEL1 = '" & prospect_contact!QualificationStatus & "', INDIVIDUAL.INDI_COUNTRY = '" & prospect_contact!Country_Employer & "', INDIVIDUAL.ACCT_NAME = '" & Replace(prospect_contact!Employer, "'", "") & "' WHERE INDIVIDUAL.INDI_FULLNAME = '" & key & …Run Code Online (Sandbox Code Playgroud)