Bil*_*ven 4 delphi advantage-database-server
我试图从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 );
...
}
Run Code Online (Sandbox Code Playgroud)
我试过的Delphi代码是:
procedure TForm1.fixARInvoiceEntryHeaderDates;
var
tableHandle:ADSHandle;
aucDOB:pansichar;
usLength:punsigned16;
begin
...
AdsGetDate(
tableHandle,
'inv_date',
aucDOB,
&usLength);
...
end;
Run Code Online (Sandbox Code Playgroud)
MAX_STR_LEN
在Advantage Client Engine 示例代码帮助主题中定义为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;
Run Code Online (Sandbox Code Playgroud)
但是,如果您使用他们的TDataSet descendant
组件(例如,TAdsTable
或者TAdsQuery
),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;
Run Code Online (Sandbox Code Playgroud)
可从其产品下载页面获取"Advantage TDataSet"组件; 单击您正在使用的Advantage版本的链接,您将找到该页面上组件的链接.
归档时间: |
|
查看次数: |
236 次 |
最近记录: |