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

Вниз

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



Страницы: 1 2 вся ветка

Текущий архив: 2005.03.13;
Скачать: CL | DM;

Наверх




Память: 0.6 MB
Время: 0.058 c
6-1105227027
Raider
2005-01-09 02:30
2005.03.13
Поиск сервера


14-1108703061
DelphiN!
2005-02-18 08:04
2005.03.13
Жизнь в Одессе


9-1103121746
D-Man
2004-12-15 17:42
2005.03.13
Генерация 2d карт


9-1102832958
GURU-ru
2004-12-12 09:29
2005.03.13
Как сделать, чтобы в GLScene не проходить сквозь стены


1-1109323510
Dysan
2005-02-25 12:25
2005.03.13
большие числа