Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.07.14;
Скачать: CL | DM;

Вниз

Отсоединенный 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.019 c
9-44532
all
2003-01-27 18:47
2003.07.14
Где в инете взять кн. по OpenGl


14-44830
MetalFan
2003-06-26 11:35
2003.07.14
NVidia GeForce 2 Pro (64mb)


11-44624
Alexander
2002-11-03 03:12
2003.07.14
Было бы неплохо реализовать аналог TAction.


14-44892
gsv_
2003-06-26 16:26
2003.07.14
Сделал TdataModule -> TwebModule: не работает ISAPI/NSAPI


3-44600
www
2003-06-21 07:59
2003.07.14
Индексы в Paradox