小编Lar*_*tig的帖子

可以在SQL Server和MS Access中使用的COALESCE,IFNULL或NZ()函数

我有一个项目可以使用SQL Server或MS Access作为数据存储.在一个SELECT语句中,我必须对单个列和单个值执行COALESCE操作,如下所示:

SELECT COALESCE([Amount], 0) FROM PaymentsDue;
Run Code Online (Sandbox Code Playgroud)

我想编写一个SQL语句,它将在SQL Server和MS Access中正确执行.直接感兴趣的SQL Server版本是2008,尽管可以优选跨版本的解决方案.

今天早些时候,有人能够向我展示一个SQL技巧,它允许我使用单个SELECT语句来有效地将DATETIME CAST到DATE.我不知道是否有人也有类似的伎俩来执行在可应用于方式COALESCE(如,IFNULL或NZ)操作 SQL Server和MS访问?

sql sql-server ms-access coalesce

9
推荐指数
3
解决办法
3万
查看次数

在 Windows 系统上使用 Path.Combine() 形成 Linux 路径

我正在用 C# 编写一个应用程序,它将在 Windows 下编译和运行,但部分负责将文件上传到 Linux 服务器上的文件夹结构。在我的 Windows 应用程序中,我希望能够轻松地将 Linux 目录和文件名与 Path.Combine 组合在一起。有没有办法用不同的路径分隔符临时覆盖 Path.Combine?

c# path

9
推荐指数
2
解决办法
1万
查看次数

使用Delphi在已安装的应用程序中进行数据库版

我正在研究许多Delphi应用程序,当发布新版本和用户选择安装其他模块时,需要在现场升级自己的数据库结构.应用程序使用各种嵌入式数据库(目前是DBISAM和Jet,但这可能会改变).

在过去,我使用DBISAM使用用户版本号完成此操作,而不是可以存储在每个表中.我发送了一组额外的空数据库文件,并在启动时使用FieldDefs比较每个表的版本号,以便在必要时更新已安装的表.虽然这有效但我发现必须运送数据库的备用副本并且更新版本的DBISAM已经改变了表重组方法,因此无论如何我都需要重写它.

我可以看到两种实现方法:使用数据库存储版本号并使用DDL脚本从旧版本获取更新版本或在应用程序内存储数据库结构的引用版本,比较启动时对数据库的引用up,并让应用程序生成DDL命令来升级数据库.

我想我可能要实现两者的一部分.我不希望每次应用程序启动时应用程序都将数据库与引用结构区分开来(太慢),因此我需要一个数据库结构版本号来检测用户是否使用了过时的结构.但是,我不确定我可以信任预先编写的脚本来进行结构升级,因为过去数据库可能已经部分更新,或者用户可能自己更改了数据库结构,所以我倾向于使用实际更新的参考差异.

研究这个问题我发现了几个数据库版本控制工具,但它们似乎都是针对SQL Server的,并且是在实际应用程序之外实现的.我正在寻找一个可以紧密集成到我的应用程序中的流程,它可以适应不同的数据库需求(我知道我必须编写适配器,自定义后代类或事件代码来处理各种DDL的差异数据库,这不会打扰我).

有没有人知道任何现成的东西,或者没有做到这一点,有没有人有任何想法:

  1. 在应用程序中存储通用关系数据库结构的引用版本的最佳方法.

  2. 将引用与实际数据库区分开来的最佳方法.

  3. 生成DDL以更新数据库的最佳方法.

database delphi database-versioning

8
推荐指数
2
解决办法
1483
查看次数

用于在Delphi中显示日志信息的组件

我有许多复杂的处理任务,会产生消息,警告和致命错误.我希望能够在与任务无关的组件中显示这些消息.我的要求是:

  • 不同种类的消息以不同的字体和/或背景颜色显示.

  • 可以过滤显示以包括或排除每种消息.

  • 显示器将通过包装它们并显示整个消息来正确处理长消息.

  • 每条消息都可以附加某种数据引用,并且可以选择消息作为实体(例如,写入RTF备忘录将不起作用).

本质上,我正在寻找某种类似列表框的组件,它支持颜色,过滤和换行.任何人都可以建议使用这样的组件(或另一个组件)作为我的日志显示的基础吗?

如果做不到这一点,我会写下自己的.我最初的想法是,我应该使用内置的TClientDataset将组件基于TDBGrid.我会将消息添加到客户端数据集(带有消息类型的列),并通过数据集方法处理过滤,并通过网格的绘制方法进行着色.

欢迎您对此设计的看法.

[注意:此时我对将日志写入文件或与Windows日志记录集成并不特别感兴趣(除非这样做解决了我的显示问题)]

delphi logging

8
推荐指数
2
解决办法
2334
查看次数

IOError:在Linux上的ReportLab中使用matplotlib PNG"解码器zip不可用",适用于Windows

我正在使用ReportLab打印matplotlib生成的图表.

我能够在我的Windows开发机器上做到这一点没有问题.但是,当我部署到Ubuntu服务器时,渲染失败并显示错误.我假设我错过了一个Python模块,但我不知道哪个模块.我相信我的开发机器和服务器上的Python,matplotlib,ReportLab和PIL的版本是相同的.

将matplotlib图(称为图表)转换为PNG并返回的代码:

img_stream = StringIO.StringIO()
chart.savefig(img_stream, format = 'png')
img_stream.seek(0)

return img_stream
Run Code Online (Sandbox Code Playgroud)

使用图片的代码:

    res_img = charts.CreateProjectionChart(doc.fund) #calls above code
    if res_img:
        img = ImageReader(res_img)
        canvas.drawImage(img, FromLeft(first_col), FromTop(3.5, 2), width - (.1 * inch), 1.75 * inch, preserveAspectRatio=True, anchor='c')
Run Code Online (Sandbox Code Playgroud)

在Windows上运行时,这是有效的.在Linux上运行时会产生以下错误:

  File "/home/web-server/reports.py", line 913, in FirstPageSetup
    canvas.drawImage(img, FromLeft(first_col), FromTop(3.5, 2), width - (.1 * inch), 1.75 * inch, preserveAspectRatio=True, anchor='c')
  File "/usr/local/lib/python2.7/dist-packages/reportlab-2.5-py2.7-linux-x86_64.egg/reportlab/pdfgen/canvas.py", line 840, in drawImage
    rawdata = image.getRGBData()
  File "/usr/local/lib/python2.7/dist-packages/reportlab-2.5-py2.7-linux-x86_64.egg/reportlab/lib/utils.py", line 658, in getRGBData
    annotateException('\nidentity=%s'%self.identity())
  File "/usr/local/lib/python2.7/dist-packages/reportlab-2.5-py2.7-linux-x86_64.egg/reportlab/lib/utils.py", line 648, …
Run Code Online (Sandbox Code Playgroud)

python png reportlab python-imaging-library

7
推荐指数
1
解决办法
8248
查看次数

处理TShellListView后代中的文件丢弃

我正在尝试创建一个TShellListView的后代,它接受从Windows资源管理器中删除的文件.我想处理组件定义中的拖放操作,而不必在任何使用该组件的应用程序中实现它(我已经找到了从Windows资源管理器中删除文件的示例,但所有这些都在应用程序/ TForm级别).

我在构造函数中调用DragAcceptFiles(),并为WM_DROPFILES定义了一个消息处理程序.但是,当我在示例项目中使用此组件并从Windows资源管理器中拖动文件时:

  1. 我看到"未接受"图标(带斜线的圆圈),而不是我可以删除文件的指示.

  2. 如果我确实试图删除文件,我听不到Beep().

我认为我没有正确警告Windows我的控件想要接受拖动文件的事实.任何人都可以建议我缺少什么?

这是我的组件代码,删除了不感兴趣的位:

    unit LJLShellListView;

    interface

    type

      TLJLShellListView = class(TShellListView)
      private
        procedure WMDropFiles(var Msg: TWMDropFiles); message WM_DROPFILES;
      published
        constructor Create(AOwner: TComponent);
      end;

    implementation

    uses ShellAPI;

    constructor TLJLShellListView.Create(AOwner: TComponent);
    begin
      inherited Create(AOwner);
      DragAcceptFiles(self.Handle, True);
    end;

    procedure TLJLShellListView.WMDropFiles(var Msg: TWMDropFiles);
    begin
      Beep();  // I never hear this.
    end;

    end.
Run Code Online (Sandbox Code Playgroud)

delphi drag-and-drop windows-shell delphi-2010

7
推荐指数
1
解决办法
1044
查看次数

库解析SQL语句

我希望能够解析任意SQL SELECT语句并检索各种组件部分(列,关系,JOIN条件,WHERE条件,ORDER BY列),理想情况下使用Delphi.快速谷歌搜索显示了几种不同的免费软件产品,但目前尚不清楚它们是否完整和/或正在积极开发中.

我迫切需要提取一系列VIEW定义中使用的关系列表,以便在我尝试创建视图之前确保存在所需的视图或表.因此,例如,声明:

SELECT PersonID, LastName, OrderID 
FROM People P INNER JOIN Orders O ON P.PersonID = O.PersonID
Run Code Online (Sandbox Code Playgroud)

我需要找回"人物"和"订单"的价值观.(显然,这是一个简单的例子.我希望能够处理更复杂的情况,例如,单词"FROM"可能作为表达式的一部分出现在列列表中).

我试图在允许使用从DLL导出的STDCALL函数的数据库中提供此服务,因此理想情况下,任何候选库都可以从Delphi或C中调用.

sql delphi parsing

6
推荐指数
1
解决办法
2357
查看次数

TVirtualStringTree中的自动调整大小列

爬上TVirtualTreeView的学习之山,我正在尝试创建一个自定义后代,确保在控件调整大小时,最后一列的宽度完全填充控件的宽度,而不需要水平滚动条.

我看到了许多与"AutoFitColumns"有关的项目(方法和一些事件),但没有涉及此功能的文档.我可以使用AutoFitColumns自动调整上一列的大小,如果是,则如何.

delphi virtualtreeview delphi-2010

6
推荐指数
1
解决办法
4543
查看次数

Blazor(服务器端)TextArea 因较长的字符串而失败

我正在为 ETL 编写 Blazor 服务器端应用程序。我有一个包含 8 个字段的表单,其中之一是使用<InputTextArea>. 该字段用于剪切和粘贴电子表格、CSV 文件、HTML 表格等中的数据内容。

OnValidSubmitfor<EditForm>连接到文件部分ProcessForm()中的函数。@code {}.razor

只要文本区域中的字符串少于 20,798 个字符,一切都可以正常工作。但是,当我将 20,798 个或更多字符粘贴到控件中时,提交会暂停(浏览器的内容被禁用),然后消息An error has occurred. This application may no longer respond until reloaded. Reload"将显示在视口的页脚中。我正在 VS Code 中进行开发,终端窗口(或任何其他控制台窗口)中没有显示任何内容,包括我的方法开头的日志记录语句ProcessForm()。但是,该消息Error: Connection disconnected with error 'Error: Server returned an error on close: Connection closed with an error.'确实出现在浏览器的 JS 控制台上。

我已经在底层 SignalR 技术中看到了对最大缓冲区长度的引用,但是我在旧帖子中看到的用于设置更大缓冲区的方法似乎都与.MapBlazorHub配置 Blazor 的新方法兼容(并且无论如何,我希望能够处理任意大量的数据)。

有谁知道在这种情况下如何增加或删除数据大小限制?

signalr blazor blazor-server-side

6
推荐指数
1
解决办法
1187
查看次数

在后代类中将setter添加到属性

我有两个Delphi类.父类声明字符串字段FSSN并将属性SSN与具有直接读取和写入字段的访问器匹配.在我的子类中,我想重新声明属性SSN以使用子类中的setter(如果可能,在将其写入字段之前转换SSN).

属性SSN将由父类的方法设置,但是(如果实例是子类的实例)我希望调用 setter.但是,当我运行代码时,我从不进入子设置器,并且该字段似乎是使用父设备中的属性声明直接设置的.

可以这样做吗?

(我意识到我可以通过在父类中引入setter过程并覆盖子进程来完成此操作;如果可能的话,我宁愿不打扰父类).

这是我到目前为止(当然是一个大大简化的版本):

TCustomPerson = class(TObject)
  protected
    FSSN: String;
  public
    procedure LoadFromXML(ANode: IXMLNode);
    property SSN: String read FSSN write FSSN;

TMyPerson = class(TCustomPerson)
  protected
    procedure SetSSN(ASSN: String);
  public
    property SSN: String read FSSN write SetSSN; // <=== Setter introduced.

 procedure TCustomPerson.LoadFromXML(ANode: IXMLNode);
 var ThisSSN: String;
 begin
    //extract SSN from XML into ThisSSN
    SSN := ThisSSN;                             // Expect to invoke SetSSN.
 end

procedure TMyPerson.SetSSN(ASSN: String);
begin
    FSSN := ValidateSSN(ASSN);                  // <== Breakpoint here never reached.
end
Run Code Online (Sandbox Code Playgroud)

delphi setter inheritance properties

5
推荐指数
1
解决办法
599
查看次数