Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
14-44853
budoudoo
2003-06-26 20:31
2003.07.14
CGI не работает:(((


7-44938
SDW@coder
2003-05-01 06:24
2003.07.14
Работа с LPT портом


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


1-44725
denis24
2003-07-01 10:46
2003.07.14
Как создать новый файл ворда на основании шаблоннного?


1-44690
Coder 911
2003-06-30 12:41
2003.07.14
Функция AddChild в TreeView.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский