我知道大多数人建议的解决方案是将我的对象的属性从TDateTime更改为String,但我无法访问Web服务应用程序的所有源代码,因此有些情况下我无法做到这一点.所以我宁愿确保我处理这个问题.
简而言之,我有一个.NET MVC应用程序,它调用Delphi 2005编写的服务应用程序的Web方法来获取约会对象,包括开始日期/时间和结束日期/时间.用户可以更改约会,然后MVC应用程序调用另一个Web方法,传入修改的约会对象,以便服务应用程序存储.
TAppointemnt的StartTime和EndTime属性在Delphi中定义为TDateTime.它们在WSDL中显示为xs:dateTime.Visual Studio在Reference.cs中将它们创建为System.DateTime.
通过在Delphi中使用Web App Debugger,并将MVC应用程序的端点设置为Web服务EXE,我可以实时浏览这两个应用程序.我所看到的是,当从Web服务传递到.NET MVC时,发送和接收的约会对象的StartTime和EndTime属性是相同的,但是当从.NET MVC传递到Delphi时,时间调整了13个小时网络服务.
虽然我理解.NET会进行一些内部时区调整,但只有当客户端和服务器位于不同的时区时才会显而易见.就我而言,客户端浏览器,.NET MVC应用程序和Delphi服务应用程序都在同一个应用程序中.事实上,它们都在同一台机器上运行,所以我不知道为什么会出现差异.
看起来他们用不同的方式用XML编码日期时间......
从Delphi服务应用程序到.NET MVC应用程序的响应:
<StartTime xsi:type="xsd:dateTime">2012-10-29T08:00:00.000+13:00</StartTime><EndTime xsi:type="xsd:dateTime">2012-10-29T09:15:00.000+13:00</EndTime>
Run Code Online (Sandbox Code Playgroud)
从.NET MVC应用程序到Delphi服务应用程序的POST:
<StartTime xsi:type="xsd:dateTime">2012-10-29T08:00:00</StartTime><EndTime xsi:type="xsd:dateTime">2012-10-29T09:15:00</EndTime>
Run Code Online (Sandbox Code Playgroud) 我有一个使用Delphi XE2编写的简单控制台应用程序.
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
Data.DBXMSSQL,
Data.DB,
Data.SqlExpr;
var
myConnection: TSQLConnection;
begin
try
{ TODO -oUser -cConsole Main : Insert code here }
myConnection := TSQLConnection.Create(nil);
myConnection.DriverName := 'MSSQL';
myConnection.GetDriverFunc := 'getSQLDriverMSSQL';
myConnection.LibraryName := 'dbxmss.dll';
myConnection.VendorLib := 'sqlncli10.dll';
myConnection.LoginPrompt := False;
myConnection.Params.Clear;
myConnection.Params.Add('drivername=MSSQL');
myConnection.Params.Add('schemaoverride=%.dbo');
myConnection.Params.Add('hostname=myserver');
myConnection.Params.Add('database=mydb');
myConnection.Params.Add('blobsize=1');
myConnection.Params.Add('localcode=0000');
myConnection.Params.Add('isolationlevel=ReadCommited');
myConnection.Params.Add('os authentication=True');
myConnection.Params.Add('prepare sql=False');
myConnection.Connected := true;
Writeln('myConnection Is connected');
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.
Run Code Online (Sandbox Code Playgroud)
当我运行它时,我收到此错误:
'DBX错误:驱动程序无法正确初始化.客户端库可能丢失,安装不正确,版本错误,或者系统路径中可能缺少驱动程序.
如果我向应用程序添加一个VCL表单,我会弹出一个关于启用"Visual Component …
有没有办法在使用VCL样式时按照正常的Windows 7格式显示窗口阴影?
我理解风格中的位图和设置取代了表单边框,但是不是阴影某种类型的alpha混合/ aero事物在受风格影响的区域之外?
将CS_DROPSHADOW添加到WindowClass.Style似乎没有任何效果.
我有几个用Delphi XE2编写的程序,这些程序是从Delphi 2005转换而来的,在Windows 7下,当在桌面上创建快捷方式时,它会显示可怕的缩放图标.
使用IcoFX,我创建了一个包含通常4种尺寸(256,48,32,16)的新图标,并浏览了我的程序,进入每个外观选项卡并加载新图标.
重建它们之后,我将Windows资源管理器切换到大图标视图并查看Bin文件夹中的程序,但我发现其中只有一些显示了新的256px图标.其他人仍显示较小的48px.
我再次检查了项目选项,它们似乎都是一样的,所以我使用Resource Hacker来查看EXE.它们都包含4个不同大小的名称为1,2,3,4的图标,它们都包含一个图标组,其中MAINICON资源包含所有4种尺寸.
所以我不知道为什么有些人正确显示大图标而其他人没有.有没有人对此有任何想法?
所述TSQLQuery类是单向的,因此对于它被用作用于数据绑定源的TDBGrid,一个的TClientdataSet需要之间要被链接TSQLQuery和的TDataSource所述的TDBGrid绑定到.
我可以连接设为TSQLConnection,使TSQLQuery活跃在设计时,使用指定的参数,可以,然后我可以在CDS单击鼠标右键,选择"将本地数据..."选项,它从获取数据TSQLQuery,然后通过链接的TDataSource出现在TDBGrid中.
选择"分配本地数据..."和实际出现在网格中的数据之间的时间间隔很短,所以我正在寻找在运行时复制它的方法.
据说,我可以将CDS 的Data属性设置为源的Data,但TSQLQuery没有Data属性.有一篇关于使用提供者的帖子,但是
DataSetProvider1.DataSet := SQLQuery1;
ClientDataSet1.Data := DataSetProvider1.Data;
Run Code Online (Sandbox Code Playgroud)
抛出访问冲突,
我通过循环遍历TSQLQuery并将记录附加到TClientDataSet来实现数据副本,但这比"分配本地数据..."要慢得多.
[编辑1]
我需要的所有组件都在设计时连接,我可以使TSQLConnection处于活动状态,然后是TSQLQuery,然后TClientDataSet和TDBGrid显示来自TSQLQuery中定义的参数化查询的数据.
在的OnChange一个事件TComboBox,我需要使用不同的参数来刷新查询,并有网格显示相关的结果,所以我关闭了TSQLQuery,改变ParamByName值,打开了TSQLQuery,然后调用ClientDataSet1.Last突出网格中的最后一行.
这给了我一个"无法对封闭数据集执行此操作"错误,所以我使用
ClientDataSet1.Active := true;
Run Code Online (Sandbox Code Playgroud)
但是会引发"访问冲突".
我能找到的所有例子都是关于将组件放到表单上,将它们链接在一起,然后它们起作用.嗯,是的,他们这样做,但我需要在运行时更改代码中的属性,并且仍然可以使用它,它只是拒绝这样做. …
放一个TRESTClient,TRESTRequest然后TRESTRepsonse放到表单上。
设置RESTClient.BaseURL,RESTRequest.Method并且Resource,还添加了"Content-Type"头参数具有的价值"application/json"。
使用添加JSON字符串RESTRequest.AddBody,然后查看RESTRequest.ContentType。
它显示ctAPPLICATION_X_WWW_FORM_URLENCODED而不是ctAPPLICATION_JSON。这将导致服务器在RESTRequest.Execute()运行时返回错误。
无法将属性分配给该属性时,如何强制该请求使用正确的内容类型?
在Delphi程序中,我使用ManualFloat显示包含Frame作为浮动窗口的TPanel,用于显示有关所选项目的额外信息.使用复选框显示/隐藏此窗口,但是如果用户使用Delphi自动创建的停靠窗口上的X关闭浮动控件,则似乎没有可以挂钩的事件来更改复选框的状态.有谁知道这将如何实现?
关于获取异常处理的调用堆栈有很多关于获取调用堆栈的帖子,我们有EurekaLog来处理它,但是我真的希望能够在运行时的任何时候获取堆栈,就像你在断点中放置一个断点一样. IDE.
遗留代码中某处的事件导致执行的函数正在执行它不应该执行的操作.虽然我们可以从调试输出中看到函数的名称,但是如果没有堆栈跟踪,我们无法分辨实际调用它的是什么.这不是一个例外,我们不想在该函数中引发异常,因此EurekaLog可以触发.
有没有办法获得调用堆栈没有任何异常?
这是一个Delphi XE2应用程序.很简单.只需调用CreateOleObject('Outlook.Application')并将结果分配给Variant.
如果程序以管理员身份运行,则会因"服务器执行失败"而失败,但它运行正常,如果我以登录用户身份运行(没有提升权限),我可以返回版本号.
为什么是这样?以管理员身份运行会阻止它创建对象的内容是什么?
delphi ×9
delphi-xe2 ×4
asp.net-mvc ×1
callstack ×1
controls ×1
docking ×1
eurekalog ×1
icons ×1
outlook ×1
resources ×1
rest ×1
sql-server ×1
tdbgrid ×1
vcl-styles ×1
web-services ×1