MAX_STR_LEN
определяется как 255 в Advantage Client Engine Sample Code раздел справки, в самой верхней части страницы, которую вы указали для образца 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;
Однако, если вы используете их компоненты TDataSet descendant
, это намного проще, например, TAdsTable
или TAdsQuery
). Затем вы можете использовать обычные 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;
В `компонентов TDataSet Advantage доступны с их страниц Product Downloads; нажмите ссылку для версии Advantage, которую вы используете, и вы найдете ссылку на компоненты на странице, которые для этой версии.
Как вы уже знаете, у Advantage есть набор компонентов Delphi, которые являются потомками TDataSet? Они делают это так, что вы можете использовать обычные операции таблицы или запроса и поля доступа с помощью 'Table.FieldByName ('DOB'). AsDateTime'. Они свободны от веб-сайта Advantage. –
Да, спасибо. Я только делаю это, чтобы исправить поврежденное значение даты (функции TAdsTable вызывают ошибку 5095). –