我使用Firebird和Delphi,我想通过线压缩实现通过互联网访问;但是我无法激活它。
我已按照本文档中的步骤获取新参数(我能找到的少数参数之一) How to enable WireCompression on Firebird 3.0 using FireDAC
在测试中,我使用 Windows server 2012 R2 Firebird:Firebird-3.0.4.33054_0_Win32(32 bits) 也复制到可执行文件夹。fbclient.dll zlib1.dll(idem 服务器和客户端)使用wirecompression=true 创建了firebird.conf。我在应用程序的 Firedac 中给出了 wirecompression=true 。
为什么我无法激活 P15:CZ 压缩?
Sending connection info for the example:
================================
Connection definition parameters
================================
DriverID=FB
Database=miservidor001:C:\sysdat\C100\gestdat03.fdb
User_Name=SYSDBA
PassWord=*****
WireCompression=true
================================
FireDAC info
================================
Tool = RAD Studio 10.2
FireDAC = 16.0.0 (Build 88974)
Platform = Windows 32 bit
Defines = FireDAC_NOLOCALE_META;FireDAC_MONITOR
================================
Client info
================================
Loading driver FB ...
Brand = Firebird
Client version …Run Code Online (Sandbox Code Playgroud) 在一个程序中,我想在Delphi中使用QImage.bits().所以,在Qt我创建了一个DLL.dll源代码如下:
test.h:
#ifndef TEST_H
#define TEST_H
#include "test_global.h"
extern "C"{
TESTSHARED_EXPORT uchar* testFunc();
}
#endif // TEST_H
Run Code Online (Sandbox Code Playgroud)
TEST.CPP:
#include "test.h"
#include <QtGui>
QImage image;
uchar* testFunc(){
image.load("c:\\1.png","PNG");
return (uchar*)image.constBits();
}
Run Code Online (Sandbox Code Playgroud)
在Delphi Side我使用此代码来使用Qt dll:
function testFunc(): PByteArray; external 'test.dll';
// ...
procedure TForm3.Button1Click(Sender: TObject);
var
bStream: TBytesStream;
P: PByteArray;
Size: Cardinal;
begin
P := testFunc;
Size := Length(PAnsiChar(P)); // AnsiChar = 1 Byte
bStream := TBytesStream.Create();
try
bStream.Write(P[0], Size); // Works Fine (^_^)
bStream.Position := 0;
bStream.SaveToFile('c:\scr.txt');
finally
bStream.Free;
end;
end; …Run Code Online (Sandbox Code Playgroud) 我正在编写一个程序,您必须在InputBox中输入密码才能访问程序最小功能.但是如果你点击输入框上的取消我的问题,我的程序会给出错误信息.所以我想知道是否有人知道我是如何做到的,因为使用Messagedlg我知道你使用IF.但是我怎么能用InputBox来做到这一点?
如果我有一个如下所示的SQL语句
SELECT * FROM myTable WHERE CID = :vCID AND DataType = :vDataType
Run Code Online (Sandbox Code Playgroud)
通常我使用TQuery来获取如下的数据
aQuery.ParamByName('vCID').Value := '0025';
aQuery.ParamByName('vDataType').AsInteger := 1;
Run Code Online (Sandbox Code Playgroud)
但是我怎么能忽略"CID"键才能得到类似SQL的东西
SELECT * FROM myTable WHERE DataType = :vDataType
Run Code Online (Sandbox Code Playgroud)
我尝试了下面的synctax,但失败了
aQuery.ParamByName('vCID').Value := '%';
aQuery.ParamByName('vDataType').AsInteger := 1;
Run Code Online (Sandbox Code Playgroud)
请帮帮我,谢谢.
出于两种不同的目的,我一直在使用Delphi和TCL一段时间.现在,我有一些我在Delphi中实现的功能.我想重用TCL实用程序中的功能.TCL程序不是一个独立的程序,它被用来在CAD工具中编写脚本.
这里讨论的功能与特定的XML解析有关,我发现TCL具有读/写XML文件的包.但是,我在想是否可以按原样重用整个逻辑.
我对该主题进行了谷歌搜索,但可以找到与为TCL创建TCL包装器相关的大部分帮助,但这是针对C/C++的.请指导在TCL代码中调用导出的函数.
我试图在TEnumerator中公开构建私有静态数组.
Delphi本身允许直接枚举静态数组(见下文),所以我怀疑Delphi在后台为静态数组创建一个枚举器,我希望我能够在GetEnumerator方法中创建和公开相同的枚举器.
(我使用的是Delphi XE2).
program Project6;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
System.Generics.Collections;
type
TMyEnum = (meA, meB);
TMyClass = class
private
FItems: array[TMyEnum] of Integer;
protected
public
function GetEnumerator: TEnumerator<Integer>;
end;
{ TMyClass }
function TMyClass.GetEnumerator: TEnumerator<Integer>;
begin
// What is the simplies way of creating this enumerator?
end;
var
myObj: TMyClass;
i: Integer;
begin
myObj := TMyClass.Create;
try
// This works but only in the same unit
for i in myObj.FItems do
WriteLn(i);
for i in myObj do …Run Code Online (Sandbox Code Playgroud) exzample code:
var
str1 : String;
str2 : AnsiString;
....
str2 := ....;
str1 := String(str2);
Run Code Online (Sandbox Code Playgroud)
我按照上面的方法进行了转换,但没有成功。我发现 str1 中丢失了一些数据。是否有安全的方法将 AnsiString 转换为 UnicodeString?
再一次是Delphi的新手问题.是否有一种标准的方法来指定方法引发的异常(我已经用Google搜索了这个但是在处理异常的基础知识之外似乎找不到任何关于该主题的内容).
换句话说,在函数/过程签名中有一种标准的说法"我的函数/过程可以抛出这个特定的异常"(我假设没有).那么让API客户知道给定过程/方法会引发哪种异常的最佳做法是什么
我已经从firebirdsql.org提供的软件包中安装了firebird 3.0.
如果我尝试使用与数据库的本地连接:
isql employee -user SYSDBA
它失败了:
无法访问锁定文件目录/ tmp/firebird /
因此,向/ tmp/firebird /添加读/写/执行权限
sudo chmod a+rwx /tmp/firebird/
并再次执行命令会产生:
语句失败,SQLSTATE = 08001
文件"/ tmp/firebird/fb_init"的"打开"操作期间的I/O错误
- 尝试打开文件时
出现错误-Unknown错误:-1
如果我打电话,这一切都会奏效,但这真的有必要吗?
在macOS上使用本地连接到firebird数据库的正确方法是什么?
我正在维护一个旧软件(Firebird 2.5 和 C#.net)。最近我们收到了很多“死锁更新与并发更新冲突”的错误。我检查了交易设置。它没有设置等待超时选项:
public override IDbTransaction BeginTransaction(IDbConnection conn)
{
FbTransaction trans = null;
if (conn.State != ConnectionState.Open)
conn.Open();
FbTransactionOptions op = new FbTransactionOptions();
op.TransactionBehavior = FbTransactionBehavior.ReadCommitted | FbTransactionBehavior.RecVersion;
trans = ((FbConnection)conn).BeginTransaction(op);
return trans;
}
Run Code Online (Sandbox Code Playgroud)
那么,为什么我们会超时?难道不应该等待提交一个事务来提交下一个事务吗?
delphi ×8
firebird ×3
dll ×2
firebird-3.0 ×2
ansistring ×1
anydac ×1
arrays ×1
bde ×1
c++ ×1
deadlock ×1
delphi-5 ×1
delphi-7 ×1
delphi-xe2 ×1
delphi-xe4 ×1
enumerator ×1
firebird2.5 ×1
firedac ×1
isql ×1
qimage ×1
qt ×1
static-array ×1
tcl ×1
tquery ×1
vcl ×1