导航:
论坛 -> DELPHI技术
斑竹:liumazi,sephil
作者:
2020/1/14 8:36:01
标题:
DELPHI 10.3.3 FDMemtable wideString 问题
浏览:1620
加入我的收藏
楼主:
请教一下,我在 DELPHI 10.3.2 使用FDQuery 读取资料在放入FDMemtable 中,wideString 栏位可以正常显示UTF-8,但是升级到 10.3.3时,却发现wideString 的栏位变成不支援UTF-8,不知是那边需要调整呢?
此帖子包含附件: 大小: 9.5K
----------------------------------------------
-
作者:
2020/1/14 8:49:59
1楼:
赋值和读取用XX.AsWideString
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
作者:
2020/1/14 9:05:34
2楼:
赋值我是用CopyDataSet的方法, mt1.CopyDataSet(q0, [coAppend]); 读取改用AsWideString 结果一样,还是问号,我有试过用其他的memtable元件,结果是正常的,只有FDMemtable 升级到10.3.3时出现问题,也重新安装了一次DELPHI,再没安装其他第三方元件前测试,结果还是一样是错误的!
----------------------------------------------
-
作者:
wntee (wntee)
▲▲▲▲△
-
普通会员
2020/1/14 9:09:38
3楼:
这种问题一般出现在fdconnection上面,找找属性
----------------------------------------------
当前后左右都没有路时,命运一定是鼓励你向上飞了...
作者:
2020/1/14 9:15:05
4楼:
问题是我用FDQuery 读取的结果是正确的!是放进FDMemtable 后才出错!
----------------------------------------------
-
作者:
2020/1/14 10:34:02
5楼:
字段类型一样吗?
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
2020/1/14 10:46:11
6楼:
都是一样的,原程式码在10.3.2是正常的,到了10.3.3才发现有这个问题!
----------------------------------------------
-
作者:
2020/1/14 10:52:50
7楼:
如果楼主能提供更多信息就好了,要是能提供少许代码片段就更好了。 下图中的RFDataSet就是继承的FDMemTable,接收服务端使用FDQuery查询返回的数据,并用DBGrid显示,数据库中用NVARCHAR类型存储Unicode的内容,一切正常。 我想知道楼主是哪些情况下会出现。
此帖子包含附件: 大小: 320.2K
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
作者:
2020/1/14 11:31:43
8楼:
我建立新的专案,测试结果,资料只要转到TFDMemtable WideString的栏位就会出问题! procedure TForm1.Button1Click(Sender: TObject); begin with q1 do begin Close; Connection := con1; with SQL do begin Clear; Add('SELECT EMP_CODE, EMP_NAME FROM PER_EMP'); Add('WHERE EMP_CODE='+QuotedStr('010201')); end; Open; end; mt1.Close; mt1.CopyDataSet(q1, [coStructure, coAppend]); end;
此帖子包含附件: 大小: 23.1K
----------------------------------------------
-
作者:
2020/1/14 11:49:13
9楼:
找到问题了,在 FireDAC.Comp.DataSet.pas 5379 行的 TFDDataSet.CopyRecordBase 过程
此帖子包含附件: 大小: 128.1K
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
作者:
2020/1/14 12:04:18
10楼:
貌似 CopyDataSet 更多的是为 non-FireDAC 设计,如果两个 DataSet 都是 FireDAC dataset ,通过Data赋值速度更快。这样: FDMemtable1.Data:=FDQuery1.Data 当然 CopyDataSet 还适合另外的场景,比如将多个Dataset或多次追加DataSet到另一个FireDAC dataSet。
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
作者:
2020/1/14 12:16:47
11楼:
字段类型用WideString应该可以避免这个问题,即TField.DataType = ftWideString,如果DataType = ftString,则是针对AnsiString的。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 博客挂了……
作者:
2020/1/14 12:18:31
11楼:
请教一下,拿掉之后,还要做什么动作吗?我修改后,结果还是一样! procedure TFDDataSet.CopyRecordBase(ASource: TDataset; AExcludeNewEmptyValues: Boolean); var i: Integer; oSrcField: TField; oDestField: TField; begin for i := 0 to ASource.FieldCount - 1 do begin oSrcField := ASource.Fields[i]; oDestField := FindField(oSrcField.FieldName); if (oDestField <> nil) and oDestField.CanModify and not (AExcludeNewEmptyValues and VarIsEmpty(oSrcField.NewValue)) then //{$IFNDEF NEXTGEN} // if oDestField is TStringField then // oDestField.AsAnsiString := oSrcField.AsAnsiString // else //{$ENDIF} oDestField.Assign(oSrcField); end; end;
----------------------------------------------
-
作者:
2020/1/14 13:16:03
12楼:
通过菜单 Project —>Add to Project 选择 FireDAC.Comp.DataSet.pas ,然后重新编译工程。
----------------------------------------------
Delphi4Linux Delphi三层/FireDAC 技术群:734515869 http://www.cnblogs.com/rtcmw
作者:
2020/1/14 13:38:24
13楼:
可以了,实在是太感谢了!
----------------------------------------------
-
作者:
2020/1/14 13:43:07
14楼:
不过好像每一个专案都需要Project —>Add to Project 选择 FireDAC.Comp.DataSet.pas,不是只要改一次就好了!
----------------------------------------------
-
作者:
2020/1/14 15:41:55
15楼:
把FireDAC.Comp.DataSet.pas放到工程目录下就可以了,专案是台湾的说法?
----------------------------------------------
-
作者:
2020/1/14 16:37:04
16楼:
是的,謝謝幫忙!
----------------------------------------------
-