← →
Ольга
(2006-11-20 11:18)
[0]
Программа нормально подключает *.mdb через ADOConnection, но при активизации каждой adotable пишет ошибку «invalid variant type conversion». Правда, продолжает работать. Очень раздражает при многократной компиляции. А готовый exe-шник запускается без ошибок. Может, подскажете, в чем у меня ошибка?
← →
clickmaker ©
(2006-11-20 11:23)
[1]
> Может, подскажете, в чем у меня ошибка?
например, попытка получить данные из пустого поля.
И зачем активизировать adotable при компиляции?
← →
Ольга
(2006-11-20 11:25)
[2]
Пустых полей ни в одной таблице нет. Активизировать, чтобы данные сразу при загрузке формы отображались.
← →
clickmaker ©
(2006-11-20 11:32)
[3]
> чтобы данные сразу при загрузке формы отображались
так а зачем это на этапе сборки?
Если уж на то пошло, то в OnCreate сделай Active := true
← →
Ольга
(2006-11-20 11:36)
[4]
Итак на OnCreate. Мне надо продемонстрировать работу не только в исполняемом файле, но и объяснить, как она работает в Delphi. Нехорошо, что выпадают ошибки при компиляции.
← →
clickmaker ©
(2006-11-20 11:47)
[5]
> ошибки при компиляции
это не ошибка компиляции. Это значит, что неверно приводятся типы при получении данных из adotable. Значит, процесс подключения в дизайн-тайме отличается чем-то от рантайма, либо где-то умышленно гасится exception. Ищи в этом направлении
← →
Stanislav ©
(2006-11-20 11:49)
[6]
Либо подключаешься на разные базы.
← →
sniknik ©
(2006-11-20 12:03)
[7]
> либо где-то умышленно гасится exception.
точно точно, такое есть даже в генофонде и именно при переводе в конкретные типы из вариантов (вроде для строк это точно есть)
но тут вряд ли оно самое (модуль dcu не должен давать ексепта, он уже скомпилен, это если только исходники в перекомпиляцию попали…)
вообще это не проблема… гораздо больший глюк в том что используется adotable, а не adodataset.
← →
Ольга
(2006-11-20 12:14)
[8]
В процессе работы отключала исключения, но сейчас ничего такого нет. С *.mdb работала первый раз, не знала, что лучше table или dataset. Работает без глюков кроме этого. Ладно, так сдам, все готово. Большое спасибо.
← →
Umnik
(2006-11-20 12:17)
[9]
Вообще в Delphi можно отключить вывод ошибок, т.е. будет работать как exe, но помоему лучше разобраться.
← →
Ольга
(2006-11-20 12:22)
[10]
Да потом как-нибудь. Включить/выключить вывод ошибок наши преподы и сами сумеют. А вот разобраться, в чем ошибка, не могут. Уже показывала. Это я уж для себя.
← →
Плохиш ©
(2006-11-20 12:37)
[11]
Во народ уже больше часа на полном серьёзе ищут ошибку в 17й строке
← →
Ольга
(2006-11-20 13:36)
[12]
Кстати, при использовании ADODataSet вместо ADOTable та же ошибка
← →
Плохиш ©
(2006-11-20 13:44)
[13]
> Ольга (20.11.06 13:36) [12]
> Кстати, при использовании ADODataSet вместо ADOTable та
> же ошибка
Простой заменой типов объктов ошибка в 17й строке не может быть исправлена.
PS. Так проблемный код будет или нет?
PPS. Проблемным является код, на котором останавливается отладчик, при возникновении исключения, указанного в [0].
← →
Ольга
(2006-11-20 13:48)
[14]
код: form1.ADOTable1.Active:=true;
← →
Ольга
(2006-11-20 13:49)
[15]
проблемный.
на котором ошибка.
← →
Куб
(2006-11-20 13:52)
[16]
А DataSource к какому визуальному компоненту подключен? Возможно это он ругается.
← →
Куб
(2006-11-20 13:55)
[17]
А вообще:
Меню: ToolsDebbuger optionsLanguage Exceptions — Stop on Delphi Exceptions (убрать галку)
← →
Ольга
(2006-11-20 13:58)
[18]
в том смысле, что какой визуальный компонент подключен в датасорсу:
гриды и эдиты
← →
Ольга
(2006-11-20 14:02)
[19]
umnik при это меню и писал
← →
Куб
(2006-11-20 14:06)
[20]
Если у гридов и едитов убрать DataSource — ругается?
← →
Куб
(2006-11-20 14:06)
[21]
[20]
+
при form1.ADOTable1.Active:=true;
← →
Ольга
(2006-11-20 14:41)
[22]
да
← →
Плохиш ©
(2006-11-20 16:05)
[23]
> Ольга (20.11.06 14:41) [22]
Какие обработчики событий имеются у этого form1.ADOTable1?
> Ольга (20.11.06 13:48) [14]
> код: form1.ADOTable1.Active:=true;
Враньё…
← →
sniknik ©
(2006-11-20 20:58)
[24]
>> код: form1.ADOTable1.Active:=true;
> Враньё…
да нет, возможно, даже если там никаких обработчиков вобще… не факт что в этом случае так оно и есть, но возможно.
это не первый подобный вопрос сдесь, были раньше, тогда в одном случае я даже проверял, дотрассировывал до того места в генофонде где ексепт возбуждался (и гасился в обработке выше уровнем… т.е. так была сделана конвертация в строку). правда с тех пор уже поставлено два sp-ка на 7ку, т.что возможно обработка изменена, не найти… да и не собираюсь искать неизвестно что (прошлый раз были конкретные условия, база, строка подключения, на каком поле возникает. и т.д. т.е был более адекватный собеседник). но то что это было, именно такая ошибка, и именно при открытии, и гдето в генофонде(не в собственных обработчиках) это точно.
вместо поисков могу только посоветовать обновить jet, и поставить все sp на дельфи…
← →
Плохиш ©
(2006-11-21 01:54)
[25]
> sniknik © (20.11.06 20:58) [24]
Сталкивался с таким в пятёрке без сервиспаков, в семёрке не приходилось.
А судя по form1, тут ни какой телепатор не поможет.
← →
sniknik ©
(2006-11-21 12:24)
[26]
кстати да, возможно это было еше в 5-6ке, уж очень смутные воспоминания о подобном глюке, давно было.
просто не исключаю вероятности, может он както воспроизвел условия при которых этот старый «глюк»(вернее обработчик с использованием ексепта, глюком в полном смысле это назвать нельзя) восстановился…
например раньше (в 5ке) я делал подключение модуля ADODB в проект и правил там кое что (таймауты в основном, они не менялись по нормальному), это чтобы генофонд не трогать. вот. если откопать какойнибудь очень старый мой проект с подключенным и таскаемым с собой модулем из пятерки то в семерке он может и откомпилится с минимальными правками но обработчики то будут старые… т.е. вариант номер раз.
недавно тут узнал есть такая Delphi 7.2 SE… (у борланда такой нет у него максимум 7.1.1 (SP 1.1)). это «энтузиасты» вытрясли из дельфей все «лишнее»… и позиционируют ее как развитие семерки (версия больше), все бы ничего, но в ней всплывают глюки которых в семерке отродясь не было, но были раньше… т.е. ктото там (кроме вытрясания «веса») основательно покопался в гефонде… какойто поклонник более старой версии, а то и не думая вообще старые модули туда перенес (они дают размер меньше… а там именно за размер так понимаю борьба была). — т.е. это вариант номер два.
и кстати, когда узнал про эту версию стало понятно откуда столько вопросов с возмущениями «чего вы меня в хелп посылаете, его у меня нет»… хелп это дополнительный размер… наверное его оттуда тоже убрали как лишнее, а пользуются этой версией похоже многие.
← →
Ольга
(2006-11-21 12:33)
[27]
Эх, мужчины. Вы же тоже наверняка не знаете, как надалить успешное грудное вскармливание, но вас никто не называет неадекватными собеседниками. А обработчиков событий, кстати, нет. А работу я уже сдала. Будьте здоровы.
← →
sniknik ©
(2006-11-21 12:46)
[28]
> но вас никто не называет неадекватными собеседниками.
если бы я вдруг это спросил, ничего в этом не соображая и без желания научится… то я именно таким бы и был, неадекватным. мог бы называть, не обиделся бы.
> А работу я уже сдала.
вот вот, цель не научится/разобраться в чем дело, цель спихнуть курсовой, и забыть все как страшный сон..
← →
clickmaker ©
(2006-11-21 12:48)
[29]
> [28] sniknik © (21.11.06 12:46)
> > А работу я уже сдала.
> вот вот, цель не научится/разобраться в чем дело, цель спихнуть
> курсовой, и забыть все как страшный сон..
А зачем девушке Дельфи? Не женское это дело.
> успешное грудное вскармливание
вот это дело
← →
ЮЮ ©
(2006-11-21 12:51)
[30]
> Вы же тоже наверняка не знаете, как надалить успешное грудное
> вскармливание,
Почему же тоже? Я даже и слова такого не знаю надалить
← →
sniknik ©
(2006-11-21 13:00)
[31]
> А зачем девушке Дельфи? Не женское это дело.
тогда пусть и не лезет, пусть вскармливает, но я не уверен что это девушка.
посмотри на темы, от него три вопроса все по разным базам парадокс, аксесс, mssql… учился в институте? тебе задавали по одному курсу (тут видимо базы) три разнотипных курсовика??? вот, вот. тут скорее не девушка пишущая программы в перерывах между вскармливаниями, тут волонтер за деньги делающий несколько курсовиков одногрупникам (тремя не ограничено, у него скорее всего еще темы под другими именами есть…).
девушкой подобного волонтера мне чтото совсем не представляется…
← →
Ольга
(2006-11-21 13:14)
[32]
Не хотела больше писать, но это неправда. Может, в других темах тоже есть Ольги (отнюдь не редкое имя), но я не из числа таких волонтеров. Ты мне, что ли, собрался запретить одновременно получать высшее образование и рожать? Желчный пузырь надо проверить.
← →
Плохиш ©
(2006-11-21 13:19)
[33]
Kirche, Küche, Kinder
← →
clickmaker ©
(2006-11-21 13:21)
[34]
> одновременно получать высшее образование и рожать?
вот одновременно как раз не стоит.
Важные дела лучше не совмещать
← →
Ольга
(2006-11-21 13:27)
[35]
Уж не беспокойтесь, в порядке очередности. И вообще, мы все сейчас не в теме.
← →
clickmaker ©
(2006-11-21 13:34)
[36]
> мы все сейчас не в теме.
дык курсовой сдан, тема закрыта. Можно и так потрещать, разве нет?
← →
Ольга
(2006-11-21 13:37)
[37]
неа, у меня еще Kirche, Küche и Kinder.
← →
Плохиш ©
(2006-11-21 13:41)
[38]
> Ольга (21.11.06 13:37) [37]
> неа, у меня еще
Это не «ещё», это вместо…
← →
Anatoly Podgoretsky ©
(2006-11-21 13:41)
[39]
> sniknik (21.11.2006 12:24:26) [26]
> недавно тут узнал есть такая Delphi 7.2 SE… (у борланда такой нет у него максимум 7.1.1 (SP 1.1)).
Надо Борланду продать и у них будет.
← →
Anatoly Podgoretsky ©
(2006-11-21 13:45)
[40]
> clickmaker (21.11.2006 13:34:36) [36]
Не закрыта, автора сменил тему на более животрепещую, как мужику вскормить ребенка грудью.
I’m having trouble with variables on FastReport…
I added the function AnsiReplaceStr to my FastReport, using the AddFunction method and the OnUserFunction event… It appears to be added correctly, but when I tried to call the function, I get the error «Invalid variant type conversion»…
This error appears for me everytime I try to use a variable on FastReport…
I created a variable on Fast and I tried to use it that way:
procedure MemoCliOnBeforePrint(Sender: TfrxComponent);
Var wI : Integer;
begin
  MemoCli.Memo.Clear;
  MemoCli.Memo.Add( 'A' );
  For wI := 1 To StrToInt( Copy( VarToStr( <wCliSpaces> ), 1, 2 ) ) Do
    MemoCli.Memo.Add( ' ' );
End;
But the error appears here too…
Finally, how to use variables on FastReport? Where is my error?
Best regards.
Перегнать динамический массив
, в OleVariant
- Подписаться на тему
- Сообщить другу
- Скачать/распечатать тему
|
|
Full Member Рейтинг (т): 11 |
Привет всем! Суть вопроса в следующем: у меня есть COM объект, через один из методов которого надо вернуть динамический массив структур (record’ов).
type TUserList=record uid, compname, uname, cstat, utype: string; end; TULMas=array of TUserList;
Сделать это видимо прийдется через OleVariant (обычный variant в библиотеке типов задать не получается). Делаю в 2 этапа: 1. Преобразовать массив к варианту. 2. преобразовать Variant к OleVariant.
aa: Variant; ULMas: TULMas; ….. DynArrayToVariant(aa, ULMas, inf);
Выдает ошибку «invalid variant type conversion».
Aa := VarArrayCreate([0, length(ULMas)-1], varVariant); for i:= 0 to length(ULMas)-1 do begin aa[i]:= ULMas[i]; end;
Тогда просто говорит, что не совместимые типы variant и TUserList. PS: поиском я пользовался и ничего подходящего не нашел. Если вопрос уже обсуждался, буду очень признателен за ссылку или за ключевые слова для поиска. |
Testudo |
|
А кто тебе сказал, что в Variant и OLEVariant можно пихать что попало? Там есть свой список типов… |
SilverShield |
|
Full Member Рейтинг (т): 11 |
Я не спорю. Вопрос в том, как тогда задачу решить? Надо как-то передать этот динамический масив… |
Romkin |
|
1. Берешь переменную OleVariant Добавлено 27.07.06, 10:47 |
SilverShield |
|
Full Member Рейтинг (т): 11 |
Цитата Romkin @ 27.07.06, 10:42 Почему бы тебе не сделать отдельный интерфейс для передачи коллекции? имеешь в виду сделать отдельный инерфейс с той структурой, что у меня сейчас в record? Но я ведь все равно не смогу передавать массив, только элементы по отдельности… Или я неправильно понял? |
Testudo |
|
Не в том разделе спрашиваешь, есть ведь раздел для OLE/COM… |
Shaggy |
|
Moderator Рейтинг (т): 130 |
uid, compname, uname, cstat, utype длиннее 255 символов? |
jack128 |
|
Moderator Рейтинг (т): 181 |
сохраняешь данные в Stream в каком хочешь формате и перегоняешь этот стрим в OleVariant по методике Romkin’a. Добавлено 27.07.06, 11:15 Цитата Testudo @ 27.07.06, 11:08 есть ведь раздел для OLE/COM… олей тут слабо пахнет… |
Romkin |
|
Цитата SilverShield @ 27.07.06, 11:02 имеешь в виду сделать отдельный инерфейс с той структурой, что у меня сейчас в record? Но я ведь все равно не смогу передавать массив, только элементы по отдельности… Или я неправильно понял?
По методу коллекции. На мой взгляд, строки так передавать удобнее. Объявляешь у себя в библиотеке типов record, и интерфейс с методами доступа к i-й записи (Минимум — в IEnumVariant, стандарт — см TCollection). Правда, с записями я не работал. Добавлено 27.07.06, 11:59 |
SilverShield |
|
Full Member Рейтинг (т): 11 |
Наверное когда начну делать, станет понятней… Спасибо всем! |
SilverShield |
|
Full Member Рейтинг (т): 11 |
Цитата Romkin @ 28.07.06, 06:28 А вот коллекцию делали, для передачи таблицы БД через интерфейс, там интерфейс доступа к коллекции интерфейсов Romkin, можно здесь поподробней? Собственно это и есть изначальная задача: передать таблицу БД. Сообщение отредактировано: SilverShield — 28.07.06, 08:23 |
Romkin |
|
Так писал бы сразу универсальный набор интерфейсов. На будущее. А то потом еще одну табличку перегнать понадобится, мало ли |
SilverShield |
|
Full Member Рейтинг (т): 11 |
Romkin, спасибо! Будет чем заняться в выходные Цитата Romkin @ 28.07.06, 10:36 Кстати, а что, через ADO напрямую — никак? Я с FireBird работаю, потому и пользую IBX, через ADO то да, можно просто _Recordset через тотже OleVariant передать. |
Romkin |
|
Если хватает возможеностей FreeIBProvider — то это будет самое простое. Ничего передавать не надо. Ничего писать не надо. Установить провайдер — и вперед. ADO легко работает через позднее связывание, из любого VBA спокойно подключишься. |
SilverShield |
|
Full Member Рейтинг (т): 11 |
Нет, это не 1С, это я сам намудрил |
0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
0 пользователей:
- Предыдущая тема
- Delphi: Общие вопросы
- Следующая тема
[ Script execution time: 0,0427 ] [ 16 queries used ] [ Generated: 7.06.23, 08:27 GMT ]
Below I am providing two examples of converting a dynamic array of some data to a variant. In first example array holds Integers
, in second example array holds TMyEnums
.
I would think that both examples are pretty simmilar, however, the second example returns an error «Invalid variant type conversion» during runtime.
program Project128;
{$APPTYPE CONSOLE}
uses
SysUtils, Variants;
type
TIntegerArray = array of Integer;
type
TMyEnum = (meOne, meTwo, meFour, meTen);
TMyEnumArray = array of TMyEnum;
var
LVar1, LVar2: Variant;
LIntArray : TIntegerArray;
LMyEnumArray: TMyEnumArray;
begin
SetLength(LIntArray, 2);
DynArrayToVariant(LVar1, LIntArray, TypeInfo(TIntegerArray)); //Works
SetLength(LMyEnumArray, 2);
DynArrayToVariant(LVar2, LMyEnumArray, TypeInfo(TMyEnumArray)); //Invalid variant type conversion
end.
Is it possible to convert array of enums to a variant? I know that I could use array of integers and cast them back to enums but I do not want to do this.