Sql 强制转换规范(#0)的字符值无效-我知道问题所在,但不知道如何解决
MS Access中的一个按钮查询没有外键的SQL视图时出现问题 我的问题与这里的问题非常相似:——这似乎就是我的问题,但我不知道如何解决它。这里有更多的细节。首先,确切的错误消息:Sql 强制转换规范(#0)的字符值无效-我知道问题所在,但不知道如何解决,sql,sql-server,ms-access,Sql,Sql Server,Ms Access,MS Access中的一个按钮查询没有外键的SQL视图时出现问题 我的问题与这里的问题非常相似:——这似乎就是我的问题,但我不知道如何解决它。这里有更多的细节。首先,确切的错误消息: ODBC--call failed. [Microsoft][ODBC SQL Server Driver]Invalid character value for cast specification (#0) 这就是我的不同之处。我在MS Access中有一个按钮,可执行以下操作: Private Sub bt
ODBC--call failed.
[Microsoft][ODBC SQL Server Driver]Invalid character value for cast specification (#0)
这就是我的不同之处。我在MS Access中有一个按钮,可执行以下操作:
Private Sub btnMachineCutSheet_Click()
Dim stDocName As String
stDocName = "qryCutSheetByMachines"
DoCmd.OpenQuery stDocName, acNormal, acEdit
End Sub
这里列出的查询(qryCutSheetByMachines)是一个相当长的查询,但我已将问题缩小到一行。问题是:
SELECT
vwCutSheet.Network,
vwCutSheet.NetworkSpeed,
vwCutSheet.Duplex
FROM vwCutSheet
INNER JOIN local_tblCreateCutSheet
ON vwCutSheet.EquipmentID = local_tblCreateCutSheet.EquipmentID;
请记住,所有表/视图都是来自MS SQL 2008数据库的链接表
第一点奇怪的是,如果我删除vwCutSheet.NetworkSpeed,line,一切正常。不幸的是,我需要这些数据
现在,如果我取出JOIN语句,查询就可以正常工作了。很明显,我需要加入,否则我就不在那里了。现在,问题(我假设)是视图(vwCutSheet)没有主键(视图应该有主键吗?)。vwCutSheet.EquipmentID不能是PK,因为在此视图中通常会出现多个EquipmentID具有相同值的情况
最后一点可能会把事情搞砸的信息是这个。如果我在Design视图中打开视图(在MS Access中),我可以看到Access需要的数据类型是“Number”-但是如果我查看视图最初查询的表,数据类型是varchar(5)。我希望Access查看的是数据的内容,除了数字(值分别为101001000和10000)
我很高兴地说这不是我设计的,所以这不是我的错!哈。。。但是,我必须支持它,所以这取决于我如何使它发挥作用
所以。。。我想这些都是相关信息。如果您需要更多信息,请告诉我,我会在继续的过程中编辑我的问题
提前感谢您的帮助
编辑:找到更多信息:
视图从中提取的表使用具有varchar(5)数据类型的列。字段为varchar(5)的原因是可以指定10、100、1000、10000或自动的“速度”
此外,视图中填充的字段可能为空。不确定您是否有权限在SQL端工作,但如果有,请尝试在那里创建联接,看看是否有问题
也可以考虑将你的存储值“Autoto”转换为数字和无效的东西,比如-1,再次假设你可以在SQL方面做修改。 您可能需要对无法更改的链接表进行一些限制或转换,然后才能加入。若在连接两个链接源之前需要处理两个链接源中的数据,则可能需要3个查询,而不是一个查询
针对你的评论,,
如果数据类型和值兼容,则连接链接到SQL server的表和本地访问表应该可以工作。如果链接表将键字段定义为数字,但包含文本值,如“auto”,则无法工作。您需要将链接表更改为文本字段而不是数字字段,以便它可以与本地表中的文本字段联接。我认为您有数据错误。您正在将数字存储在文本字段中,除非您不这样做 如果将0定义为“自动”,则可以将其设置为数字字段。或者,使用查找表和外键值,使1=10、2=100、3=1000、4=100000和0=Auto。如果您这样做,您可以使用该值作为指数(10^N),结果将是1、10、100、1000、10000,其中1将是您的自动值 或者makenull=Auto,在这种情况下,10^NULL仍然会为您提供NULL(Auto),而所有其他值都可以使用 这将完全消除这个问题 但它假定您可以访问数据表
如果无法更改字段的数据类型,也可以创建一个视图来执行上述操作之一。对我来说,最简单的方法就是去掉该死的文本值“Auto”。如果我这样做,我可能会将“Auto”转换为Null,这样结果将是一列带有Null的数字。如果这是一个强制转换错误,我会首先查看数据类型number/varchar…在SQL中,尝试从ISNUMERIC(field)=0的表中执行
SELECT*,尽管ISNUMERIC有自己的问题。这是数据问题吗?在SQL Server端,该字段中是否存在应为零或其他值的空字符串?该字段中是否有应清除的非数字字符?您可以在sql server端执行一个查询,将该列强制转换为十进制数据类型,还是生成一个错误?啊,是的,我认为这是问题的一部分。我将更新我的原始帖子,但字段是varchar(5)的原因是可以指定“速度”为10、100、1000、10000或自动。此外,视图中填充的字段可能为空。这是一个粗略的建议,但链接表的某些属性实际上是可编辑的。您是否尝试过编辑链接表并尝试设置字段的数据类型?我想这是行不通的,但值得一试。是的,我尝试过编辑那个属性,但没有任何运气。它认为这是一个数字,所以我尝试改为文本,但它不接受。我在SQL方面有权限(我有dbo权限)。但是,我不能那样做。这就是为什么。。。我想你帮我找出了问题所在。如果查看我的联接,我将联接名为local_tblCreateCutSheet的表和名为vwCutSheet的视图。视图是SQL格式的,但表是access中的本地表。我现在要用谷歌搜索了,但我敢打赌这是我问题的一部分。谢谢你的信息,贝丝,很高兴知道它应该能工作。您提到将链接表更改为文本字段。SQL中该字段的数据类型是varchar(5),因此SQL端的一切都应该正常。我没看到我能做的太多了