Форум: "Базы";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
ВнизADOTable - ошибка при подключении Найти похожие ветки
← →
Scorpio © (2005-02-09 10:12) [0]Добрый день мастера, подскажите пишу:
ADOTable1.Active := true;
ADOTable1.First;
while not ADOTable1.Eof do
begin
ADOTable1.Next;
end;
А когда запускаю компилятор она мне выдает:
Could not convert variant of type(Null) into type (String)
Как мне это лечить ??
← →
Плохиш © (2005-02-09 10:16) [1]Проверяй в событиях для твоей ADOTable1, а не пустой ли набор данных.
← →
Scorpio © (2005-02-09 10:20) [2]Непонял?? Это как, таблица есть, и если ее открыть просто ч/з ADOTable без компилятора, в DBGride то я эту таблицу вижу очень отчетливо и без ошибок, а когда запускаю компилятор, то она мне выдает ошибку.
← →
Anatoly Podgoretsky © (2005-02-09 10:21) [3]Это не ошибка подключения, а ошибка преобразования неверных данных. А смысл какой данной конструкции, тут более правильно использовать sleep
← →
Anatoly Podgoretsky © (2005-02-09 10:22) [4]Scorpio © (09.02.05 10:20) [2]
Поделись с народом компиляторов в гриде.
← →
Плохиш © (2005-02-09 10:27) [5]
>Scorpio © (09.02.05 10:20) [2]
А не надо использовать конструкции типа String1 := ADOTable1["NullValue"];
← →
Scorpio © (2005-02-09 10:28) [6]Мне нужно чтобы она не ждала определенное время, а произвела обработку данных, там мне нужно произвести двойную обработку по таблице, т.е. беру первое значение запоминаю позицию, затем спускаюсь ниже, и если есть определенные условия то удаляю ненужные строки, а затем поднимаюсь к первой записи и опускаюсь к следующе и т.д. и проделываю тоже самое с ней.
Ч/з ADODataSet у меня неочень получилось, хочу попробовать ч/з ADOTable.
← →
Плохиш © (2005-02-09 10:32) [7]asString + F1
← →
Scorpio © (2005-02-09 10:32) [8]String1 := ADOTable1["NullValue"]; ??
Та конструкция что сверху это вся моя программа. А ошибку выдает, я же никакие переменные неиспользую??
← →
Плохиш © (2005-02-09 10:35) [9]
>Scorpio © (09.02.05 10:32) [8]
1. С учётом [2] и [6], врёшь.
2. Чудес не бывает.
← →
Scorpio © (2005-02-09 10:37) [10]Плохиш у тебя какой Delphi ??
← →
Anatoly Podgoretsky © (2005-02-09 10:38) [11]Scorpio © (09.02.05 10:28) [6]
Обработки данных в коде не наблюдается, а наблюдается только организация паузы, а для организации пауз sleep более подходящ.
← →
Anatoly Podgoretsky © (2005-02-09 10:39) [12]Scorpio © (09.02.05 10:37) [10]
В потрепаться, там ты узнаешь не только Про него и про других, выборка будет более репрезентативная.
← →
ЮЮ © (2005-02-09 10:45) [13]>т.е. беру первое значение запоминаю позицию, затем спускаюсь ниже, и если есть определенные условия то удаляю ненужные строки, а затем поднимаюсь к первой записи и опускаюсь к следующе и т.д. и проделываю тоже самое с ней.
код для выделенного покажи
← →
Scorpio © (2005-02-09 10:47) [14]Anatoly Podgoretsky
Мне ненужна пауза в программе, я немогу просто без ошибки подключить базу, я могу дать исходный код с использованием ADODataSet, но он очень гомоздкий, и у меня в конце неполучалось запомнить те записи которые я удалил, поэтому я хочу попробоватиь ч/з ADOTable, но здесь возникла ошибка, при запуске программы, онав мне кидает ошибку, а затем после повторного запуска, она производит прогон таблицы. Как мне избежать этой ошибки при подключении, даже если я сразу ADOTable прсваиваю ACTIVE = TRUE, всеравно она после запуска программы сначала выдает ошибку, и затем после повторного запуска производит прогон по таблице.
← →
janb (2005-02-09 10:50) [15]Просто напиши что ты хочешь этим сделать подробнее. Смысл
← →
Scorpio © (2005-02-09 10:51) [16]procedure TForm1.BitBtn1Click(Sender: TObject);
var i, n, i1, mo, yd, k4, re : integer;
rr : array of integer;
mas : array [1..100] of integer;
report : array [1..20,1..1000] of integer;
metka, metka1 : TBookmark;
label l1, l2, l3, l4 ;
// mo - ?? ??????? ??????? ???????
// yd - ????? ??
begin
rr := 0;
SetLength(rr, 21);
ADODataSet1.Active := true;
// ADOTable2.Active := true;
// ADOTable2.First;
ADODataSet1.First;
i := 0;
i1 := 0;
l3: while not ADODataSet1.eof do
begin
ADODataSet1.DisableControls;
if ADODataSet1.FieldByName("re_").IsNull then
begin
DataSource1.DataSet.Edit;
ADODataSet1.Delete;
DataSource1.DataSet.Edit;
ADODataSet1.Post;
end
else
begin
re := ADODataSet1.FieldByName("re_").AsInteger;
if (re = 1) or (re = 30) or (re = 34) or (re = 37) or (re = 41) or (re = 42) or (re = 44) then
begin
DataSource1.DataSet.Edit;
ADODataSet1.Delete;
DataSource1.DataSet.Edit;
ADODataSet1.Post;
goto l3;
end;
end;
if ADODataSet1.FieldByName("wh_").IsNull then
begin
DataSource1.DataSet.Edit;
ADODataSet1.Delete;
DataSource1.DataSet.Edit;
ADODataSet1.Post;
goto l3;
end else
yd := ADODataSet1.FieldByName("wh_").AsInteger;
// DataSource1.DataSet.Edit;
// ????? ? ????????? ?????? ???????? ??????
// ??????? ????? ?????????? ? ???????? ??????? ???????.
if ADODataSet1.FieldByName("rf_").AsDateTime <= StrToDate(Edit1.Text) then
begin
DataSource1.DataSet.Edit;
ADODataSet1.Delete;
ADODataSet1.Prior;
DataSource1.DataSet.Edit;
ADODataSet1.Post;
end;
if (ADODataSet1.FieldByName("rf_").AsDateTime >= StrToDate(Edit1.Text)) and (ADODataSet1.FieldByName("rf_").AsDateTime <= StrToDate(Edit2.Text)) then
begin
if not ADODataSet1.FieldByName("re_").IsNull then
re := ADODataSet1.FieldByName("re_").AsInteger;
metka := ADODataSet1.GetBookmark;
// ADODataSet1.Next;
// while not ADOTable1.eof do
// ?????????? ???????? ?? ??????? ?????? ? ?????? ????????
l2: begin
l4: if ADODataSet1.Eof then
begin
ADODataSet1.GotoBookmark(metka1);
goto l1;
end;
ADODataSet1.Next;
if ADODataSet1.FieldByName("re_").IsNull then
begin
DataSource1.DataSet.Edit;
ADODataSet1.Delete;
goto l4;
end else
if (ADODataSet1.FieldByName("re_").AsInteger = re) and (ADODataSet1.FieldByName("rf_").AsDateTime >= StrToDate(Edit1.Text)) and (ADODataSet1.FieldByName("rf_").AsDateTime <= StrToDate(Edit2.Text))and (ADODataSet1.FieldByName("wh_").AsInteger = yd) then
begin
DataSource1.DataSet.Edit;
ADODataSet1.Delete;
goto l4;
end;
if (ADODataSet1.FieldByName("re_").AsInteger = re) and (ADODataSet1.FieldByName("rf_").AsDateTime < StrToDate(Edit1.Text)) and (ADODataSet1.FieldByName("wh_").AsInteger = yd) then
begin
DataSource1.DataSet.Edit;
ADODataSet1.Prior;
ADODataSet1.Next;
metka1 := ADODataSet1.GetBookmark;
ADODataSet1.Delete;
ADODataSet1.GotoBookmark(metka1);
ADODataSet1.FreeBookmark(metka1);
i := 1;
goto l4;
end;
if ADODataSet1.FieldByName("wh_").AsInteger <> yd then
begin
ADODataSet1.GotoBookmark(metka);
ADODataSet1.FreeBookmark(metka);
goto l2;
end;
i := 1;
ADODataSet1.next;
end;
end;
l1: ADODataSet1.next;
end;
end;
Но здесь у меня были очень сильные тормоза и немог запомнить то что удалил.
Сейчас хочу попробовать ч/з ADOTable
← →
janb (2005-02-09 10:53) [17]упс...
← →
ЮЮ © (2005-02-09 10:54) [18]Начнем с начала, где (в каком обработчике) стоит указанный в [1] код?
← →
Scorpio © (2005-02-09 10:58) [19]Да я хочу это все переделать по новому с учетом ADOTable, только когда я ее подключаю у меня ошибка выскакивает, этот кусок я исключил, думал что где то здесь, и попробовал, просто подключить чтобы активировать таблицу, и просто пробежаться по ее данным, а она мне сразу без пробега ошибку с типами, а потом повторно сразу запускаю и она пробег делает, как мне избежать эту ошибку с данными ??
← →
Плохиш © (2005-02-09 10:58) [20]
>Scorpio © (09.02.05 10:51) [16]
8-O Нифига себе Та конструкция что сверху это вся моя программа
DataSource1.DataSet.Edit;
ADODataSet1.Delete;
DataSource1.DataSet.Edit;
ADODataSet1.Post;
Ой, что енто?
← →
ЮЮ © (2005-02-09 11:02) [21]вместо
DataSource1.DataSet.Edit;
ADODataSet1.Delete;
DataSource1.DataSet.Edit;
ADODataSet1.Post;
достаточно
ADODataSet1.Delete;
при этом ADODataSet1.next не надо, т.к. текущей записью после этого станет следующая, если есть.
Source1.DataSet и ADODataSet1 - один и тот же набор данных?
← →
Scorpio © (2005-02-09 11:02) [22]DataSource1.DataSet.Edit; - перевод в рижим редактирования
АDODataSet1.Delete; - Удаление строки
DataSource1.DataSet.Edit;
ADODataSet1.Post; - запомнить для БД,
Но Post используетсмя для ADOTable, я думал что и для ADODataSet тоже проканает, а она нехочет, поэтому хочу сразу ч/з ADOTable произвести выборку.
← →
Плохиш © (2005-02-09 11:03) [23]
>Scorpio © (09.02.05 10:58) [19]
Анекдот, про пьяного под фонарём напоминает :-(
PS. 11:00 московского времени, можно фа форуме больше не тусоваться :-(
← →
Плохиш © (2005-02-09 11:04) [24]
>Scorpio © (09.02.05 11:02) [22]
Книжку бы чтоли какую почитал для начала :-(
← →
Scorpio © (2005-02-09 11:08) [25]Мне нужно прсто мою БД паодключить ч/з ADOTable чтобы небыло ошибок и все.
← →
Scorpio © (2005-02-09 11:26) [26]Тогда еще такой вопрос, почему если я подключаю базу через Table, а не ADOTable , то она мне ошибку невыдает??
← →
msguns © (2005-02-09 11:32) [27]>Scorpio © (09.02.05 10:51) [16]
Ух и наколбасил пацан ;))
Что-то подсказывает мне, что всю эту трахомудрию можно вполне впихнуть в полтора-два десятка строк кода.
Или вообще обойтись одним-двумя запросами
← →
ЮЮ © (2005-02-09 11:32) [28]Потому, что движок другой. БДЕ форева !!!
← →
Scorpio © (2005-02-09 11:35) [29]Но у меня проблема, моя БД находится не у меня на машине а у черта на куличках, как мне теперь быть??
← →
msguns © (2005-02-09 11:39) [30]И, главное, ни единой строки комментария. Видимо, предполагается, что каждый мало-мальски продвинутый джидай должен с молоком матери всосать, что обозначают эти таинственные wh_, rf_ и re_
А эти прыжки-перескоки из внутреннего цикла во внешний и поистине мастерское владение Next`ами, Prior`ами, Detet`ами и Insert`ами внутри сканирующего цикла напоминают Брюса Ли, не правда ли ?
← →
ЮЮ © (2005-02-09 11:40) [31]>как мне теперь быть??
Переходить на ADOCommand !!! :)
DELETE FROM table
WHERE
(re_ IS NULL) OR
(wh_ IS NULL) OR
(re IN (1,30,34,37,41,42,44))
что ещё удалить?
← →
msguns © (2005-02-09 11:41) [32]>Scorpio © (09.02.05 11:35) [29]
> как мне теперь быть??
Немедленно бросать программить приложения с БД и "Учиться, учиться и учиться". Как говорил великий В.И.Ленин
← →
msguns © (2005-02-09 11:44) [33]>ЮЮ © (09.02.05 11:40) [31]
>Переходить на ADOCommand !!! :)
Ну да, как сиквел, так обязательно на адо ;))
Биде тоже его некисло понимает ;)
Тут трабла вовсе не в bde..
← →
Scorpio © (2005-02-09 11:57) [34]Смотри это мое условие:
Есть БД поле wh_ - номера дел, в базе могут повторяться от двух до бесконечноти.
поле re_ - решение к этому делу.
поле rf_ - дата принятия решения
Базу я отсортировал по номерам дел, и по дате принятия решений.
Теперь мне нужно взять номер дела и проверить по базе со всеми его похожими номерами и сравнить было ли такое решение принято ранее и если было и оно невходит в отчетный период, (т.е. у меня есть диапазон дат по которым я смотрю rf_), то я его удаляю, также как и то что я нашел, т.е. в моей БД в итоге должно остаться дела решения которых ранее невстречальсь, они неповторялись, входили в отчетный период.
← →
ЮЮ © (2005-02-09 12:07) [35]DELETE FROM table
WHERE
NOT (rf_ BETWEEN :FirstDate AND :LastDate)
улалит все записи, не попадающие в "отчетный период", хотя очень странное обращение с записями, не боишься, что пользователь ошибется при задании периода и базе хана?
А есть поля, одназначно определяющее запись, в случае, если
wh_, re_ и rf_ в двух записях совпадают?
← →
msguns © (2005-02-09 12:08) [36]>Scorpio © (09.02.05 11:57) [34]
Сам-то понял, что написал ?
Что это за китайский иероглиф :
проверить по базе со всеми его похожими номерами ?
или это:
сравнить было ли такое решение принято ранее и если было и оно невходит в отчетный период, ?
Что с чем сравниваешь ? "Похожие" номера делов или дела с решениями ? Где тут котлеты, где мухи, а где тарелка ? ИМХО, все перемешано и свалено в одну большую кучу, откуда предполагается хлебать. Битое стекло пополам с дохлыми мухами.
Вердикт: база спроектирована не просто бездарно. Преступно. За такое надо сажать. Лет на 5-10. За статьи и учебники.
Причем срочно !
← →
msguns © (2005-02-09 12:19) [37]Что за манера все заталкивать в одну монстроидальную таблицу, гениально называемую таинственным словом "база" ?
А вот нельзя было по-нашему, по-бразильски ? Без этих восточных запремудростей:
1. Таблица дел. Содержит поля:
ID
номер вх.
номер исх.
дата
ссылка на документ-родитель (если их может быть несколько, то
детал таблица с ID документов)
ФИО исполнителя
ФИО отв.лица (утвержд.подпись)
<всякая всячина о документе>
2. Таблица решений. Содержит поля:
ID
Дата решения
Дата срока исполнения
Код источника (комиссия, отдел, комитет и т.д.)
ФИО ответств. лица
список лиц, если была комиссия (обычный VARCHAR, но отображается как мемо для того, чтоб каждое ФИО было с новой строки)
<инфа о решении>
список ID документов, которых касается
список ID документов, на основании которых принято.
и т.д.
Схема примерная, конечно, я же не знаю что за "дела" тебе поручено учитывать. Что-то похожее на типичный контроль директивных документов в организации подобной какому-нить исполкому.
Но по схеме данных хотя бы можно понять, "кто на ком стоит"
← →
Scorpio © (2005-02-09 12:22) [38]Теперь мне нужно взять номер дела, его решение и дату и проверить по базе со всеми его похожими номерами дел и сравнить было ли такое решение принято ранее и если было и оно невходит в отчетный период, (т.е. у меня есть диапазон дат по которым я смотрю rf_), то я его удаляю, также как и то что я нашел, т.е. в моей БД в итоге должно остаться дела решения которых ранее невстречальсь, они неповторялись, входили в отчетный период.
Номер дела, номер решения, дата принятия в одной строке находятся.
А есть поля, одназначно определяющее запись, в случае, если
wh_, re_ и rf_ в двух записях совпадают?
Чтобы одновременно все три были похожи, токого небывает.
Базу в котоорой происходят удаления я формирую сам из 4 других, так что если неправильный диапазон дат мне нестрашен.
← →
msguns © (2005-02-09 12:34) [39]Ааа, ты все о своем, о женском. Посты не читаем, на предложения и замечания не реагируем.
Ну что ж, флаг в руки. И барабанные палочки. Вместо барабана можно по голове, ей не вредно будет
Счастливо побарабанить !
← →
Scorpio © (2005-02-09 12:51) [40]Я немогу понять что ты непонимаешь, там все просто, ч/з SQL запрос все правильно неудальшь, а чтобы построчно - я немогу подключить ADOTable.
А есть поля, одназначно определяющее запись, в случае, если
wh_, re_ и rf_ в двух записях совпадают? - такого небывает.
проверить по базе со всеми его похожими номерами ? - я писал, что в моей таблице могуть до 20 раз встречаться номера дел у них могут быть похожие даты и решения, но не все три одновременно.
сравнить было ли такое решение принято ранее и если было и оно невходит в отчетный период, ? - т.е. я взял номер дела с последней датой по возрастанию и сравниваю относительно этого номера дела все решения которые прилагаютя к этому делу и если есть похожее и оно невходит в отчетный переиод то я удаляю их оба.
Пример (период 01,01,2005 - 10,01,2005)
wh_ re_ rf_
204010001 4 8,01,2005
204010001 5 3,01,2005
204010001 4 30,12,2004
204020002 4 30,11,2004
204020002 3 5,10,2004
204030003 8 8,01,2005
204030003 6 7,01,2005
Должно остаться:
204010001 5 3,01,2005
204030003 8 8,01,2005
204030003 6 7,01,2005
← →
ЮЮ © (2005-02-09 12:57) [41]>>wh_, re_ и rf_ в двух записях совпадают?
>Чтобы одновременно все три были похожи, токого небывает.
речь не о "похожесте", а о "равенстве" :)
а так бывает?
Дело Решение Дата
33 10 01.01.05
33 10 02.01.05
какую из записей предпочтешь оставить.
>Базу в котоорой происходят удаления я формирую сам из 4 других
А зачем их тогда вставлять, а не проверять "диапазон сразу"?
← →
ЮЮ © (2005-02-09 13:06) [42]А этоа точно не долна попасть?
204010001 4 8,01,2005
Т.е. тебе нужны такие записи (дело, решение) за отчетный период, для которых нет соответствующих записей (дело, решение) в предшествующие периоду сроки?
>ч/з SQL запрос все правильно неудальшь
зато почти всегда можно выбрать только то, что нужно
← →
Scorpio © (2005-02-09 13:06) [43]Такое может быть и надо оставить с высокой датой 02.01.05, а второе удалить.
А зачем их тогда вставлять, а не проверять "диапазон сразу"? - там проблема, что 4 БД по 150 мб более 300,000 записей, а индексные файлы *.idx Фоксовские, я их подключить к моей программе немогу, и те БД создаются прграммой написанной на фоксе, так что индексные файлы я немогу использовать.
← →
Scorpio © (2005-02-09 13:11) [44]А этоа точно не долна попасть?
204010001 4 8,01,2005
Точно, потомучто оно считалось в другом отчете с периодом 1.12.2004 - 31.12.2004. Такая заморочка.
← →
Scorpio © (2005-02-09 13:12) [45]А этоа точно не долна попасть?
204010001 4 8,01,2005
Точно, потомучто оно считалось в другом отчете с периодом 1.12.2004 - 31.12.2004. Такая заморочка.
Страницы: 1 2 вся ветка
Форум: "Базы";
Текущий архив: 2005.03.13;
Скачать: [xml.tar.bz2];
Память: 0.61 MB
Время: 0.039 c