![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Ошибка экспорта в Excel: OLE error 800A03EC; EOleException [D7, XP]
OW © (2011-09-07 17:39:00)из MSSQL с помощью ADO беру данные и экспортирую в excel.
sql = 'select *from dbo.ActivRequestOW(:FDateTime(Первая дата) , вторая дата). передается параметрами.
не трогал ничего уже пол-года. Есл не больше. Каждый день выгружалось на ура.
в InterpriseManagere и сейчас выполняется на ура - данные получаю, примерно 4 000 строк (и 14 полей).
пробовал так
Cell1 := Sheet.Cells[BeginRow, BeginCol];
Sheet.Range[Cell1, EmptyParam].CopyFromRecordset( -- тут OLE error 800A03EC
Q.Recordset,
EmptyParam,
EmptyParam
);
и так
EndRow := Q.RecordCount + BeginRow;
EndCol := Q.FieldCount + BeginCol;
ArrayData := VarArrayCreate([1, EndRow + 1, 1, EndCol + 1], varVariant);
i := 0;
if WithHead then
begin
i := i + 1;
for j := 0 to Q.FieldCount - 1 do
ArrayData[I, J+1] := Q.Fields[j].FieldName;
end;
Q.First;
while not(Q.Eof) do
begin
i := i + 1;
for j := 0 to Q.FieldCount - 1 do
ArrayData[I, J+1] := Q.Fields[j].Value;
Q.Next;
end;
SetValue(Sheet, BeginCol, BeginRow, BeginCol + EndCol, BeginRow + EndRow, ArrayData);
procedure SetValue(Sheet: Variant; BC, BR, EC, ER: Integer; Val: variant);
var
Cell1, Cell2, Range: Variant;
begin
Cell1 := Sheet.Cells[BR, BC];
Cell2 := Sheet.Cells[ER, EC];
Range := Sheet.Range[Cell1, Cell2];
Range.Value := Val; -- тут OLE error 800A03EC
end;
последний вариант юзаю во всех проектах, никогда не подводил, а последние два дня вылетает ошибка сабжа.
На начальном этапе один раз такое было - в одно поле юзер набил половину Войны и мир, и ячейка excel не могла принять. Сейчас это учтено.
from dbo.ActivRequestOW возвращает не более 500 знаков с каждого поля.
Куда еще можно посмотреть?
OW (2011-09-08 11:43:00) [1]наверное. Сам явно не задаю.
Но он же (Excel) по-умолчанию сам какой-то принимает. По-моему, по первому встреченному значению, но не уверен. Да и ладно, в запросе просто конвертнул этот столбец явно в строку да и все. За оба дня перезапустил - все сделалось.
Всем спасибо :)
Ega23 (2011-09-08 11:33:00) [2]
> Т.е., видимо, Excel конвертировать пытается по-ходу дела.
Я так понимаю, если формат ячейки задан.
OW (2011-09-08 11:09:00) [3]если принудительно написать везде а-ля
select
''''+Cast(Step as VarChar(2)) Step,
''''+Convert(varchar(25), R.DateCreate, 120) DateCreate,
то все опять выгружается.
Т.е., видимо, Excel конвертировать пытается по-ходу дела.
OW (2011-09-08 11:06:00) [4]
> Inovet © (08.09.11 11:02) [12]
Сервер и обрабатывает
это excel не принимает
Inovet (2011-09-08 11:02:00) [5]> [10] OW © (08.09.11 10:50)
> "В квадратике знак вопроса" символ, который оператор умудрился набрать..
> Как!? казалось бы, стандартный INPUT web-интерфейса..
Нет, казалось бы и что, что набрал левый символ - сервер раз позволил такой добавить, то и обрабатывать должен.
OW (2011-09-08 10:56:00) [6]причем, символ то не виден. А оператор один и тот же.
Поди набила где-то(или автор на php web-интерфейса) стандартные ответы - и копипастит (или выбирает).
Видел их интерфейс только мельком, пару раз.
OW (2011-09-08 10:50:00) [7]нет. Нашел :)
"В квадратике знак вопроса" символ, который оператор умудрился набрать..
Как!? казалось бы, стандартный INPUT web-интерфейса..
проUPDATEил поле - все работает :)
Ega23 (2011-09-08 10:24:00) [8]
> чем они отличаются?!? ничего не понимаю..
3532630xxx
8422633xxx
Может типы данных уплыли, или RangeCheck какой-нить?
OW (2011-09-08 09:23:00) [9]Вот до этой записи экспорт идет select top 1133
0
2011-08-06 03:48:31.883
110806034831863341
КонтактЦентр
Оренбург
Консультации/Передано в тех.поддержку
не заполнено
не заполнено
3532630xxx
не заполнено
NULL
ИП
Рузаxxxx А.С.(80)
select top 1134 - нет.
1134-я запись
0
2011-08-06 07:06:06.200
110806070606183341
КонтактЦентр
Ульяновск
Консультации/Передано в тех.поддержку
не заполнено
не заполнено
8422633xxx
не заполнено
NULL
ИП
Рузxxxxx А.С.(80)
чем они отличаются?!? ничего не понимаю..
ps
сегодня 8,5к записей - все ок.
OW (2011-09-08 08:41:00) [10]работает. Сегодня отработала версия без правки, позавчерашняя. Точно в данных.
OW (2011-09-07 18:54:00) [11]видите ли, уважаемый..
Это работало так.
Трансформацию данных надо еще настраивать и отлаживать
А это должно работать уже завтра, в идеале сегодня.
Так и будет, иначе побьют :)
Ошибка где-то опять в данных.
select top 1 * - работает
select * - с ошибкой..
Сейчас вычислю что не нравится.
Медвежонок Пятачок (2011-09-07 17:58:00) [12]поэтому не надо загрязнять ноосферу и экосистему земли дурацкими Project1.exe
Медвежонок Пятачок (2011-09-07 17:51:00) [13]из оракла, из мдб, из веба, и из многого другого.
скрипач здесь не нужен.
если нужен скрипач - не нужен эксель.
а если нужен и скрипач и эксель, то выгрузи ты все в ксв и открой себе спокойно экселем.
OW (2011-09-07 17:48:00) [14]
> Медвежонок Пятачок © (07.09.11 17:43) [1]
1. не лишняя
Там еще из Oracle берутся данные, и из mdb если надо, все это на одну страницу, по которой делается pivot, с измерениями, в зависимости от..
2. а по теме?
OW (2011-09-07 17:46:00) [15]точный запрос:
select
IDOperation,
Step,
CONVERT ( varchar(10), DateCreate, 121) [Дата],
[ФИО],
[Филиал],
case
when Step = 0 then 'Консультация'
else 'Заявка'
end [Обращение],
[ПредметОбращения] [Причина],
[Источник],
[Адрес],
[АОН],
[Телефон] [КонтактТел],
'' [Описание],
[Служба],
[Оператор]
from
dbo.ActivRequestOW(:DTF, :DTS)
Код Функции:
Select
Cast(Step as int) Step,
Cast(R.DateCreate as DateTime) DateCreate,
Cast(R.IDOperation as VarChar(50)) IDOperation,
Cast(
case
when OMS.IDOperation is null then 'КонтактЦентр'
else 'ОМС'
end as VarChar(50)) [Источник], -------------------------------------------------------[Источник]
Cast(D.ShortName as VarChar(50)) [Филиал], ----------------------------------------------[Филиал]
Cast(S.FullNAME as VarChar(300)) [ПредметОбращения], ---------------------------------[ПредметОбращения]
Cast(
case
when C.IDOperation is null then 'не заполнено'
else C.NAME
end as VarChar(250)) [ФИО], --------------------------------------[ФИО]
Cast(
case
when C.IDOperation is null then 'не заполнено'
else C.Address
end as VarChar(250)) [Адрес], -----------------------------[Адрес]
Cast(O.AON as VarChar(50)) [АОН], -----------------------------------------------[АОН]
Cast(
case
when C.IDOperation is null then 'не заполнено'
else C.PHONE
end as VarChar(50)) [Телефон], -------------------[Телефон]
Cast(SUBSTRING ( R.Information ,1 , 500 ) as VarChar(500)) [Информация], -------------[Информация]
Cast(
case
when LEFT ( SD.INFORMATION, 2) = 'ИП' then 'ИП-'
when LEFT ( SD.INFORMATION, 2) = 'ТП' then 'ТП+'
when LEFT ( SD.INFORMATION, 3) = 'КСС' then 'КСС'
else SD.INFORMATION
end as VarChar(150)) [Служба], --------------------------------------[Служба]
--SD.INFORMATION, -------- А если полностью смотреть?
Cast(U.UName as VarChar(150)) [Оператор] ---------------------------[Оператор]
from
Request R
join VTDept D ON r.IDVTDept = d.IDVTDept
join Operation O ON r.IDOperation = o.IDOperation
join vFullNameSubject S on S.IDSubject = R.IDSubject
join SCTDept SD on SD.SCT = O.SCT and SD.IDVTDept = D.IDVTDept
join [Service] SRV on SRV.IDService = SD.IDService
left join Customer C on R.IDOperation = C.IDOperation
left join OMSRequestToOperation OMS on OMS.IDOperation = R.IDOperation
left join SDUser U on U.IDUser = R.IDUser
Медвежонок Пятачок (2011-09-07 17:43:00) [16]Твоя программа здесь лишняя.
Exel сам в состоянии получить эти данные, без подпорок.