这是完整的错误:
消息4864,级别16,状态1,行3第1行第5列(FK_User_CreatedBy)的批量装入数据转换错误(指定代码页的类型不匹配或无效字符).
这是我痛苦的存在主义快照:)
很多问题触及了这些问题,但没有一个能够解决这个问题......
我怀疑我的问题就像这里描述的那样,但我不确定.未正确跳过的目标表列不是稀疏的.
这是在记事本和记事本++中打开的用于导入的两行数据文件(.csv):(是的我知道行终止符是\ r \n而字段/列终止符是\ t或',')
这是纯文本:
1,fArty,Padul,1,10/1/1962,Head of ,Australia,AU Talavera Centre,NSW,7 CSU,farty.randy@gummibaer.com
2,mifsm,Jodel,1,10/1/1970,Chief Officer,Australia,AU ,NSW,8 CSU,midsm@gummibaer.com
Run Code Online (Sandbox Code Playgroud)
背景/背景: 在没有记录的情况下对小表和输入文件进行测试(记住它是在具有许多列的表上跳过列,最终会损坏)...
导入适用于小型数据库表,如下所示:
因此创建:
以下是表创建的代码:
DROP TABLE dbo.tbl_Person_Importtest
CREATE TABLE dbo.tbl_Person_Importtest
(
ID int PRIMARY KEY NOT NULL,
LastName varchar(100) NOT NULL,
FirstName varchar(100) NOT NULL,
FK_Gender varchar(4) NOT NULL,
DateOfBirth date NOT NULL,
JobTitle varchar(200) NOT NULL,
Address1Country varchar(50) NOT NULL,
Location varchar(200) NOT NULL,
Address1StateOrProvince varchar(50) NOT NULL,
Department varchar(200) NOT NULL, …Run Code Online (Sandbox Code Playgroud) 以下是Embarcadero帮助的示例代码(http://docwiki.embarcadero.com/RADStudio/XE5/en/JSON):
您可以使用以下代码片段之一将JSON字符串表示形式转换为JSON.
使用ParseJSONValue:
procedure ConsumeJsonString;
var
LJSONObject: TJSONObject;
begin
LJSONObject := nil;
try
{ convert String to JSON }
LJSONObject := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(GJSONString), 0) as TJSONObject;
{ output the JSON to console as String }
Writeln(LJSONObject.ToString);
finally
LJSONObject.Free;
end;
Run Code Online (Sandbox Code Playgroud)
该方法失败,并在as行上抛出类无效类型!
使用Parse:
procedure ConsumeJsonBytes;
var
LJSONObject: TJSONObject;
begin
LJSONObject := nil;
try
LJSONObject := TJsonObject.Create;
{ convert String to JSON }
LJSONObject.Parse(BytesOf(GJSONString), 0);
{ output the JSON to console as String }
Writeln(LJSONObject.ToString);
finally
LJSONObject.Free;
end; …Run Code Online (Sandbox Code Playgroud) 有很多示例可以展示如何使用OPENROWSET和OPENDATASOURCE来打开远程SQL服务器上的表的查询,以及从其他服务器上的文件中获取数据.不幸的是,他们都没有告诉我如何做我需要做的具体事情,这是使用其中一个命令从远程服务器获取.csv或.xlsx Excel文件使用服务器IP地址和Windows登录服务器没有安装SQL Server实例 - 只有IIS7或8.
如果Microsoft文档没有省略如何以最可能的方式使用他们的工具的基本示例,那将是很好的.尝试40多种不同的参数组合列表并不是真正的智慧:它只是浪费时间的低效率.开发人员有更多重要的事情要做,而不是浪费时间试图发现一些"秘密知识"配方,这些配方实际上只是一个没有正确记录的命令参数变体,并假装这与聪明的事情有关.
因此,为了减轻我的哲学焦虑,有人可以提供一个示例,说明如何使用OPENROWSET或OPENDATASOURCE从.csv文件或使用远程服务器IP地址XXX.XXX.XXX.XXX的Excel电子表格中获取/选择内容,如果应包含端口号,则文件系统路径正确附加到该命令或包含在命令中,以及用户名和密码参数的正确排列.远程服务器上没有SQL服务器实例 - 只有IIS和具有Windows身份验证的网站.如果你有一个与远程服务器上的SQL服务器实例一起工作的例子,那就行了(虽然我认为一些REMOTEDATASOURCE示例已经涵盖了这一点)但我真的想要一个我不必拥有SQL服务器实例的例子在远程Web服务器上.
我知道你可以使用链接服务器,但是在包含要访问的文件的远程服务器上有一些额外的包袱,在我的情况下,包含excel或.csv文本文件的服务器甚至没有SQL Server它上面的实例 - 只有IIS和一个网站.
(另外 - 有人可以确认您是否可以使用具有所需文本数据文件的远程服务器上没有SQL Server或其他数据库服务器实例的链接服务器?它是仅链接数据库服务器,还是远程服务器可以只是一个链接服务器没有安装SQL服务器的Windows和Web服务器?)
这个例子很方便,但是不告诉我是否SERVERPROPERTY('MachineName') AS nvarchar(128))
可以包含没有SQL服务器实例的远程Windows服务器的IP地址,它不是关于访问文本文件.
这个例子非常接近,但在帖子中似乎没有积极的结果,并且没有涉及文本文件 - 只有数据库查询所以远程系统安装了SQL服务器?:
SELECT *
FROM OPENROWSET('PACISOleDb', '192.168.200.172';'admin';'admin', 'SELECT * FROM DB')
Run Code Online (Sandbox Code Playgroud)
现有的例子很好,但没有多大帮助:
SELECT *
FROM OPENROWSET('SQLNCLI',
'DRIVER={SQL Server};SERVER=YourServer;UID=UserID;PWD=Password',
'select * from sys.sysobjects')
Run Code Online (Sandbox Code Playgroud)
(来源)
SELECT ContactName, CompanyName, ContactTitle
FROM OPENDATASOURCE('SQLOLEDB',
'Data Source=ServerName;User ID=MyUID;Password=MyPass' ).Northwind.dbo.Customers
Run Code Online (Sandbox Code Playgroud)
(来源)
-- SQL Server 2012
SELECT
*
FROM
OPENDATASOURCE ('SQLNCLI11',
'Data Source=SQLInstanceName;Catalog=DBName;User …Run Code Online (Sandbox Code Playgroud) 创建一个表单并放置一个TValueListEditor.将doColumnTitlesdisplay选项设置为False.尝试删除第一行.你会收到一个'Grid Index out of Bounds'错误.这是一头丑陋的猪,所以我在这里问一下,除了块之外是否只是尝试处理它的唯一方法?
背景:
行继承自TCustomGridvia TCustomDrawGrid(第493行VCL.grids.pas)属性getter是私有变量FCurrent.Y,其类型是来自两个值记录的值/字段.我无法找到FCurrent默认值设置的位置(因此整数默认为0).如果TValueListEditor只有一行和/或没有选择行,则不清楚存在什么值.
在任何情况下,我得到一个网格索引超出范围错误 - 可能是从 - 提出TCustomGrid- 但只有当只有一行和/或我尝试在TValueListEditorwith 的第一行删除doColumnTitles := false.删除其他行很好.无论这是否是一个错误,它似乎有些愚蠢和不一致.
TValueList编辑器构造函数是否有继承的原因RowCount := 2;?
根据以下内容引发错误TValueListEditor.DeleteRow:
try
if (Strings.Count = 0) or
(ARow < 1) or (ARow > RowCount - FixedRows) then
{$IF DEFINED(CLR)}
raise EInvalidGridOperation.CreateRes(SIndexOutOfRange);
{$ELSE}
raise EInvalidGridOperation.CreateRes(@SIndexOutOfRange);
{$ENDIF}
Strings.Delete(ARow - FixedRows);
finally
FDeleting := False;
end;
Run Code Online (Sandbox Code Playgroud)
(参见VCL.Valedit.pas,804) …
delphi ×2
sql-server ×2
bulkinsert ×1
csv ×1
database ×1
delphi-xe6 ×1
excel ×1
json ×1
map-files ×1
openrowset ×1
parsing ×1
sql ×1