gpt4 book ai didi

delphi - 如何将 Advantage API 示例 C 代码转换为 Delphi

转载 作者:行者123 更新时间:2023-12-03 15:27:00 25 4
gpt4 key购买 nike

我正在尝试将示例代码从 Advantage Database 文档翻译为 Delphi,但似乎无法正确获取变量声明,从 varType 开始,也无法找出 MAX_STR_LEN (常量、函数、其他东西?)。

以下是示例中的代码:

 UNSIGNED32 DoDates( void )
{
ADSHANDLE hTable;
UNSIGNED16 usLength;
UNSIGNED8 aucDOB[MAX_STR_LEN+1];
...
usLength = MAX_STR_LEN+1
AdsGetDate( hTable, "DOB", aucDOB, &usLength );
...
}

我尝试过的Delphi代码是:

 procedure TForm1.fixARInvoiceEntryHeaderDates;
var
tableHandle:ADSHandle;
aucDOB:pansichar;
usLength:punsigned16;

begin
...
AdsGetDate(
tableHandle,
'inv_date',
aucDOB,
&usLength);
...
end;

最佳答案

MAX_STR_LEN 在 Advantage Client 引擎 Sample Code 中定义为 255帮助主题,位于您为 DoDates 示例引用的页面的最顶部。他们这样声明是因为他们在整个示例代码中都使用了它,因此它足够大,可以用来返回各种类型的数据(字符、日期和其他类型的字符串内容)。

如果您只想专门使用缓冲区来检索日期,则可以使用更小的缓冲区大小,因为没有任何 ADS 日期类型或格式能接近那么长。 (我在下面的示例中使用了 49 个单字节字符(字节)的缓冲区大小,这仍然至少是所需大小的 2 倍。)

这样的事情应该有效:

// Reduced because of intended use. See text above, 2nd paragraph.
// If you're using this buffer for things other than dates,
// change to 255 as original code did.

const
MAX_STR_LEN = 49;

type
TCharDateBuffer = array[0..MAX_STR_LEN + 1] of AnsiChar;

var
DateBuffer: TCharDateBuffer;
BuffSize: UNSIGNED16; // From Ace.pas
tableHandle: ADSHandle; // From Ace.pas
begin
// Your code to open the table and get the handle

BuffSize := MAX_STR_LEN;
AdsGetDate(tableHandle, 'DOB', DateBuffer, @BuffSize);
end;

不过,如果您使用 Delphi 的 TDataSet 后代 组件(例如 TAdsTableTAdsQuery),那么使用 Delphi 会容易得多。然后您可以使用普通的 TField 属性:

// Retrieve DOB as string
StrDOB := MyAdsTable.FieldByName('DOB').AsString;

// Get DOB as TDateTime
DOB := MyAdsTable.FieldByName('DOB').AsDateTime;

// Set date field to today
MyAdsTable.FieldByName('CHANGED').AsDateTime := Date;

`Advantage TDataSet 组件可从其 Product Downloads 获取。页;单击您正在使用的 Advantage 版本的链接,您将在页面上找到该版本的组件链接。

关于delphi - 如何将 Advantage API 示例 C 代码转换为 Delphi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20431689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com