小编Ian*_*oyd的帖子

"必须使用ADO参数化查询声明变量@myvariable"错误

我试图使用ADO参数化查询.执行该Command对象会引发错误:

必须声明变量'@filename'

@filename使用CreateParameter/Append以下方式声明参数:

sql := 'INSERT INTO Sqm(Filename, data) VALUES(@filename, @data)';

command := CoCommand.Create;
command.Set_ActiveConnection(Connection.ConnectionObject);
command.Set_CommandText(sql);
command.Set_CommandType(adCmdText);
command.Parameters.Append(Command.CreateParameter('@filename', adLongVarWChar, adParamInput, -1, Filename));
command.Parameters.Append(Command.CreateParameter('@data', adLongVarWChar, adParamInput, -1, xml);

command.Execute({out}recordsAffected, EmptyParam, adCmdText or adExecuteNoRecords);
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

sql-server delphi ado parameterized-query

4
推荐指数
1
解决办法
4662
查看次数

如何从表成员中引用lua表成员?

我在lua有一张桌子:

enUS = {
   LOCALE_STHOUSANDS = ",",  --Thousands separator e.g. comma

   patNumber = "%d+["..LOCALE_STHOUSANDS.."%d]*", --regex to find a number

   ["PreScanPatterns"] = {
      ["^("..patNumber..") Armor$"] = "ARMOR",
   }
}
Run Code Online (Sandbox Code Playgroud)

所以你看到这个表中有一整串自引用:

  • LOCAL_STHOUSANDS
    • patNumber
      • ["^("..patNumber..") Armor$"]

如何在lua表中执行自引用?


我不想做的是必须硬替换价值观; 有数百个参考:

enUS = {
   LOCALE_STHOUSANDS = ",",  --Thousands separator e.g. comma

   patNumber = "%d+[,%d]*", --regex to find a number

   ["PreScanPatterns"] = {
      ["^(%d+[,%d]*) Armor$"] = "ARMOR",
   }
}
Run Code Online (Sandbox Code Playgroud)

lua

4
推荐指数
2
解决办法
3299
查看次数

将JSON解析为.NET 4.0中的非对象?

.NET 4.0是否有JSON解析器?


理想情况是:

String jsonText = GetTheJsonFromTheInternet();
var json = JsonValue.Parse(jsonText);
Run Code Online (Sandbox Code Playgroud)

现在我有一组嵌套的键值对。

使用JSON.net

想要的是必须创建一组对象以匹配JSON。我询问解析 JSON,而不是反序列化 JSON。您可以假装是因为我不知道JSON的结构。

类似于解析XML的方式:

String xmlText = GetTheXmlFromTheInternet();
XmlDocument doc = new XmlDocument();
doc.LoadXml(XmlText);
Run Code Online (Sandbox Code Playgroud)

现在我有了一组嵌套的名称-值-属性。您不会创建用于表示XML DOM树的对象;您解析了XML字符串,现在可以轻松导航和查找内容。

为什么不只使用JsonValue.Parse()?

因为:

  • System.Json.dll直到.NET Framework 4.5才提供JsonValue(位于中)。
  • 并且Visual Studio 2010无法定位.NET Framework 4.5。(仅Visual Studio 2012)
  • 和Visual Studio 2012需要Windows 8

并且编写我自己的JSON解析器将需要几天(以使其正确无误)。

我已经阅读了JSON.net文档。我不知道它是否支持JSON解析。

.net json .net-4.0

4
推荐指数
1
解决办法
2251
查看次数

VitrtualStringTree.如何Drag'n'Drop到ROOT水平?

有一棵树:ROOT - VirtualStringTree(你看不到它,TVirtualStringTree.RootNode)

  • 我的根节点1
  • 我的根节点2
    • 第二节点1
    • 第二节点2
    • 第二节点3
  • 我的根节点3

我可以Drag'n'Drop"我的根节点3"到任何可见节点,但我不能将它返回到defaut位置,到树的根级别.

我试着这样:

//Part of code from OnDragDrop Event of VirtualStringTree
    if (Sender.DropTargetNode = Sender.RootNode) then
    begin
      for i := 0 to high(Nodes) do
      begin
        LinksTree.MoveTo(Nodes[i], Sender.DropTargetNode, Attachmode, False);
      end;
    end;
Run Code Online (Sandbox Code Playgroud)

我把鼠标放到了无处,但没有任何反应.在DragOver中,如果DropTarget是VST.RootNode,则接受drop to root.

谁知道,如果我将鼠标拖动到组件的空白区域,如何将节点删除到VST.RootNode?

delphi virtualtreeview delphi-xe tvirtualstringtree delphi-xe4

4
推荐指数
1
解决办法
485
查看次数

用于Windows的Lazarus 64位可以为Windows编译为64位吗?

我下载了,我认为,将是Lazarus的64位版本:

在此输入图像描述

虽然它下载了32位版本:

在此输入图像描述

安装后,IDE为32位:

在此输入图像描述

它构建了32位二进制文​​件:

在此输入图像描述

将定位选项更改为win64,win64,win64:

在此输入图像描述

给出Lazarus不支持64位的错误:

在此输入图像描述

阅读有点过时的Cross compiling Wiki页面,提供了有关如何使64位Lazarus在64位计算机上运行的说明:

从win32到win64

如果您正在编译fpc的2.1.1或更大分支,您可以这样做:

$ make all OS_TARGET=win64 CPU_TARGET=x86_64
Run Code Online (Sandbox Code Playgroud)

然后

$ make crossinstall OS_TARGET=win64 CPU_TARGET=x86_64
Run Code Online (Sandbox Code Playgroud)

如果你遵循,只会给出几千个错误:

在此输入图像描述

共同建议是放弃拉扎勒斯IDE,一共,和使用一种称为叉CodeTyphoon.下载500 MB并安装它,我无法在任何地方找到IDE:

在此输入图像描述

这令人困惑,因为我认为 CodeTyphoon是一个Pascal可视化编程环境.

在我继续之前

在我随机绊倒,下载千兆字节的东西之前,让我直接问:

用于Windows的Lazarus 64位可以为Windows编译为64位吗?

是否有64位Lazarus for Windows,可以创建64位Windows二进制文件?我错过了什么,或者那个功能还没有?

如果能力在那里,至少有人会认为我的困惑是可以理解的吗?

windows 64-bit lazarus

4
推荐指数
1
解决办法
5538
查看次数

何时卸载.NET程序集?

我们知道在最后一刻加载 .NET程序集- 当您输入引用外部程序集中某些内容的方法时.

装卸什么时候卸载?是否在程序集中不再引用任何类/资源时?它永远不会吗?

想象一下,外部程序集中的类具有私有静态.首次需要时初始化静态.据推测,当从内存中删除静态变量时,static将不再包含值.

何时从内存中删除未引用的静态类?

何时卸载.NET程序集?

奖金阅读

.net clr

4
推荐指数
1
解决办法
240
查看次数

使用隐藏节点着色VirtualStringTree行

我目前在我的树的OnBeforeCellPaint事件中使用此代码:

if Node.Index mod 2 = 0 then
begin
  TargetCanvas.Brush.Color := clBlack;
  TargetCanvas.FillRect(CellRect);
end
else
begin
  TargetCanvas.Brush.Color := clPurple;
  TargetCanvas.FillRect(CellRect);
end;
Run Code Online (Sandbox Code Playgroud)

为我的节点着色.但是对于隐藏节点,这不起作用,因为索引保持不变.是否有可见的索引或简单的解决方法?

提前致谢.

delphi virtualtreeview delphi-xe2 tvirtualstringtree

4
推荐指数
1
解决办法
349
查看次数

如何使用类型类的类通用助手

我试图弄清楚如何对这个辅助方法进行泛化 ; 以便它返回与要求相同的类型:

type
    TScreenHelper = class helper for TScreen
    public
        function FindForm(DesiredFormClass: TFormClass): TForm;
    end;
Run Code Online (Sandbox Code Playgroud)

现在,调用者必须将返回值强制转换为他们已经想要的类型:

var
   frmReportReminderSetup: TfrmReportReminderSetup;
begin
   //frmReportReminderSetup := Screen.FindForm(TfrmReportReminderSetup); Doesn't compile

   frmReportReminderSetup := TfrmReportReminderSetup(Screen.FindForm(TfrmReportReminderSetup));
Run Code Online (Sandbox Code Playgroud)

非通用实现是:

function TScreenHelper.FindForm(DesiredFormClass: TFormClass): TForm;
var
    f: TForm;
    i: Integer;
begin
    Result := nil;

    for i := 0 to Screen.FormCount-1 do //Screen.Forms does not support enumeration
    begin
        f := Screen.Forms[i];

        if (f is DesiredFormClass) then
        begin
            Result := f;
            Exit;
        end;
    end;
end;
Run Code Online (Sandbox Code Playgroud)

泛型

我想要的是一些使用泛型的方法,以便函数返回它所要求的类型.

frmContoso := Screen.FindForm(TfrmContoso);
Run Code Online (Sandbox Code Playgroud)

在伪代码中,我想要的签名是这样的:

function …
Run Code Online (Sandbox Code Playgroud)

delphi generics delphi-xe6

4
推荐指数
1
解决办法
938
查看次数

包含TWebBrowser时,TPanel不会自动调整大小

我在Delphi 5和Delphi XE6之间发现了另一个回归.

我有一个TPanel设置AutoSize为其内容(面板为绿色):

在此输入图像描述

TPanel包含任何其他控件(例如a)时TListView,面板将自动调整其大小为包含列表视图的大小:

在此输入图像描述

但是当包含的控件是TWebBrowser(或替换TEmbeddedWB)时,面板将不会自动调整大小:

在此输入图像描述

必须是TWebBrowser的错

TWebBrowserVCL包装器出错时,必须有一些自动调整大小所需的VCL管道.我需要知道什么在XE6中被破坏了以及它的修复.

用户user1611655有一个很好的解决方法:

我遇到了类似的问题.

它通过在TPanel"下面" 放置并将TWebBrowserWeb浏览器对齐来解决alClient.

我对解决方法不太感兴趣,作为修复 - 我可以将它添加到我们的其他一堆VCL源修复程序中.实际上,由于我使用了大大改进的TEmbeddedWB控件,因此可以将修复程序放在那里; 离开TWebBrowser了.

重现步骤

Form1.pas:

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.ExtCtrls, Vcl.OleCtrls, SHDocVw;

type
  TForm1 = class(TForm)
     Panel1: TPanel;
     WebBrowser1: TWebBrowser;
  private
     { Private declarations }
  public
     { Public …
Run Code Online (Sandbox Code Playgroud)

delphi twebbrowser delphi-xe6

4
推荐指数
1
解决办法
1129
查看次数

有没有办法避免RTL?

我一直在Delphi中玩一些不允许使用RTL的东西.这是一种dll.

在分离PE(可移植可执行文件)文件格式之后,我意识到所有PE文件都有一个"入口点".这是Windows在加载模块(exe或dll)后调用的第一件事.

名称的功能,位于此入口点,并且它的隐含参数,取决于PE的一种,它是:

在Delphi中,此入口点是位于主项目文件中的代码.

在DLL的情况下,可以读取传递给我们的"DllMain"的参数LoadLibrary.如果在EntryPointAddress上放置一个断点:

在此输入图像描述

你可以在堆栈上看到三个参数:

在此输入图像描述

您所要做的就是捕获它们:

library Project1;

function DllMain(hinstDLL: HINST; fdwReason: Cardinal; lpvReserved: Pointer): Integer; stdcall;
begin
    Result := 1; //Windows uses FALSE=0, TRUE=1. Delphi uses False=0, True=-1
end;

begin
    //Code in here is run …
Run Code Online (Sandbox Code Playgroud)

delphi

4
推荐指数
2
解决办法
416
查看次数