Форум: "Базы";
Текущий архив: 2003.07.14;
Скачать: [xml.tar.bz2];
ВнизОтсоединенный ADO Recordset Найти похожие ветки
← →
Rad (2003-06-19 13:53) [0]Вроде когда-то что-то было - но поиск ничего не дает :((
Делаю никуда не подсоединенный Recordset для более удобной передачи на клиента.
Такой же код в VBA работает, а в Delphi при добавлении второй строки - падает, даже без конкретного сообщения об ошибке, просто с Access Violation.
if FNeedADORecordSet then
begin
varClear(FQueryResultAsADORecordSet);
FQueryResultAsADORecordSet:= CreateOleObject("ADODB.Recordset");
if not varIsEmpty(FQueryResultAsADORecordSet) then
begin
//FQueryResultAsADORecordSet.CursorLocation:= adUseClient;
//FQueryResultAsADORecordSet.LockType:= adLockBatchOptimistic;
//FQueryResultAsADORecordSet.CursorType:= adOpenStatic;
for i:= 0 to dbc.ibqQuery.Fields.Count - 1 do
begin
//Перевод TFieldType (DataSet"овского) в TOleEnum (ADORecordSet"овский)
case dbc.ibqQuery.Fields[i].DataType of
ftSmallint:
begin
ftType:= adSmallInt;
iSize:= 4;
end;
ftInteger, ftWord, ftAutoinc, ftLargeInt:
begin
ftType:= adInteger;
iSize:= 4;
end;
ftDate:
begin
ftType:= adDBDate;
iSize:= 8;
end;
ftDateTime:
begin
ftType:= adDBTimeStamp;
iSize:= 8;
end;
ftTime:
begin
ftType:= adDBTime;
iSize:= 8;
end;
ftFloat:
begin
ftType:= adSingle;
iSize:= (dbc.ibqQuery.Fields[i] as TFloatField).Precision;
end;
ftBCD:
begin
ftType:= adDouble;
iSize:= (dbc.ibqQuery.Fields[i] as TBCDField).Precision;
end;
ftCurrency:
begin
ftType:= adCurrency;
iSize:= (dbc.ibqQuery.Fields[i] as TCurrencyField).Precision;
end;
ftString, ftMemo, ftFixedChar, ftWideString:
begin
ftType:= adVarWChar;
iSize:= (dbc.ibqQuery.Fields[i] as TStringField).Size;
if iSize <= 0 then iSize:= 10;
end;
else
begin
ftType:= adError;
iSize:= 0;
end;
end;//case
FQueryResultAsADORecordSet.Fields.Append(
dbc.ibqQuery.Fields[i].FieldName,
ftType,
iSize,
adFldUpdatable + adFldIsNullable + adFldMayBeNull);
end;
FQueryResultAsADORecordSet.Open;
dbc.ibqQuery.First();
while not dbc.ibqQuery.EOF do
begin
FQueryResultAsADORecordSet.AddNew();
for j:= 0 to FQueryResultAsADORecordSet.Fields.Count - 1 do
begin
FQueryResultAsADORecordSet.Fields[j].Value:= dbc.ibqQuery.Fields[j].Value;
end;
dbc.ibqQuery.Next();
end;
FQueryResultAsADORecordSet.Update();
end;
end;
← →
Rad (2003-06-19 13:56) [1]Вот после выделенной строки всё нормально, но в цикле по полям после успешной установки значения ячейке первого столбца (
j = 0
) на втором шаге - кирдык.
Повторюсь, такой же (по смыслу и по вызываемым методам/назначаемым свойствам) код в VBA работает без проблем.
← →
Rad (2003-06-19 14:25) [2]Блин, вопрос снят.
for j:= 0 to FQueryResultAsADORecordSet.Fields.Count - 1 do
begin
if FQueryResultAsADORecordSet.Fields[j].Type = adWChar then
begin
//var sValue: WideString;
sValue:= dbc.ibqQuery.Fields[j].Value;
FQueryResultAsADORecordSet.Fields[j].Value:= sValue;
end
else
FQueryResultAsADORecordSet.Fields[j].Value:= dbc.ibqQuery.Fields[j].Value;
end;
... Не все автопреобразования одинаково полезны...
← →
Delirium (2003-06-19 14:55) [3]
//Перевод TFieldType (DataSet"овского) в TOleEnum (ADORecordSet"овский)
:)
const DataTypeValues: array[TDataType] of TOleEnum = (
adEmpty, adVarChar, adSmallint, adInteger, adUnsignedSmallint,
adBoolean, adDouble, adDouble, adCurrency, adDate, adDate,
adDate, adBinary, adVarBinary, adInteger, adLongVarBinary,
adLongVarChar, adLongVarBinary, adLongVarBinary, adLongVarBinary,
adLongVarBinary, adLongVarBinary, adEmpty, adChar, adVarWChar, adBigInt,
adEmpty, adEmpty, adEmpty, adEmpty, adEmpty, adEmpty, adVariant,
adIUnknown, adIDispatch, adGuid, adEmpty, adEmpty
);
begin
← →
KSergey (2003-06-19 17:12) [4]А это, а что есть "Отсоединенный ADO Recordset"? Поделитесь, пожалуйста..
Recordset не привязанный к каким-либо данным где либо (кроме как созданный в памяти)?
← →
Polevi (2003-06-19 17:22) [5]ADO allows you to create a recordset, and then to disconnect it from its source. In a client/server environment, this allows you to update the recordset on the client without maintaining a constant connection to the server. Later, your changes are batch updated to the server
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.07.14;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c