Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

ADOQUERY - Где я не прав? [D7]


Страницы:   1 2

Vitaliy12 ©   (2007-05-25 12:22:00) 

Здравстуйте Мастера!

Помогите, заклинило. Не могу найти ошибку. В таблице ADOTable1 есть записи. ADOQuery1 делает запрос, но на выходе количество записей на одну меньше реально существующих. Фрагмент кода:

  ADOTable1.TableName:= 'Temp_Start_70';
  ADOTable1.ConnectionString:= ReadIni('Options', 'Con_Str_ADOT1');
  if ADOTable1.Active= False then ADOTable1.Open;
  ADOQuery1.ConnectionString:= ReadIni('Options', 'Con_Str_Q1');
  ADOQuery1.Close;
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Text:='select * from Temp_Start WHERE N_TEL BETWEEN "700000" AND "799999"';
  ADOQuery1.Open;
  try
   while not ADOQuery1.Eof do
     begin
        ADOTable1.Insert;
       for i:=0 to ADOQuery1.Fields.Count - 1  do
        begin
         ADOTable1.FieldByName(ADOQuery1.FieldDefs[i].name).Value :=
         ADOQuery1.Fields[i].Value;
       end;
     ADOTable1.Post;
     ADOQuery1.Next
    end;
   finally
 //  ADOQuery1.Close;
  end;

Где, что не так посоветуйте!

Всем спасибо!


Плохиш   (2007-05-25 16:19:00) [1]


> Vitaliy12 ©   (25.05.07 14:53) [20]

Рекомендую с помощью просмотрщика данных, менеджера там-какого, поставляемого с используемой бд посмотреть внимательно, что содержится в поле N_TEL каждой записи.


Vitaliy12   (2007-05-25 14:53:00) [2]


> Ну тогда продолжай оскорбляться


Оскорбился!
Сделал AdoCommand с текстом 'INSERT INTO Temp_Start_70 SELECT  * FROM Temp_Start WHERE N_TEL BETWEEN "700000" AND "799999"'. Тоже самое?

Изменил  "700000" AND "799999"  string на integer : 'INSERT INTO Temp_Start_70 SELECT  * FROM Temp_Start WHERE N_TEL BETWEEN 700000 AND 799999'. Все равно не видит последнюю строку.

Оскорбляться дальше, или кто-нибудь знает что делать


Anatoly Podgoretsky   (2007-05-25 14:28:00) [3]

> Vitaliy12  (25.05.2007 14:16:18)  [18]

Ну тогда продолжай оскорбляться


Vitaliy12   (2007-05-25 14:16:00) [4]


> Когда здесь хватает простого запроса INSERT INTO SELECT
> FROM и одной строки кода AdoCommand.Execute


Можно пример?

Я потому в новичках и спрашиваю. А оскорбить каждый может


Anatoly Podgoretsky   (2007-05-25 14:05:00) [5]

> Vitaliy12  (25.05.2007 12:22:00)  [0]

Что за бред и Clear и ADOQuery1.SQL.Text:=, Query и Table
Когда здесь хватает простого запроса INSERT INTO SELECT FROM и одной строки кода AdoCommand.Execute


Плохиш   (2007-05-25 14:01:00) [6]


> for a:= 0 to ADOQuery1.RecordCount (или ADOQuery1.RecordCount - 1)

Афигеть, вот что бывает, когда вместо изучения основ топчут кнопки...


Vitaliy12   (2007-05-25 13:57:00) [7]


>Т.о. понятно, что в [0] приведён не тот код, который используется, а так >от балды... Т.к. там никаких RecordCount не упоминается...


Вместо
while not ADOQuery1.Eof do       ставил
for a:= 0 to ADOQuery1.RecordCount (или ADOQuery1.RecordCount - 1)


> так а что это за БД, где числа надо брать в кавычки?

Access XP


Плохиш   (2007-05-25 13:42:00) [8]


> Vitaliy12 ©   (25.05.07 13:34) [12]

Т.о. понятно, что в [0] приведён не тот код, который используется, а так от балды... Т.к. там никаких RecordCount не упоминается...


clickmaker   (2007-05-25 13:40:00) [9]

так а что это за БД, где числа надо брать в кавычки?


Vitaliy12   (2007-05-25 13:34:00) [10]

>between по строкам, а Виталий? то ли ты написал?

В таблице в столбце записи для условия. В данном конкретмон случае записи в Таблице Temp_Start полностью соответствуют условию BETWEEN "700000" AND "799999". Последняя запись игнорируется. Если ставил RecordCount без минус 1, получалось нужное количество записей, но последняя запись повторяла предпоследнюю, т е было две одинаковых записи. В случае присутствия записей не соответствующих условию(лишних), все правильно работает. Но когда нужная строка стоит последней, она опускается


Плохиш   (2007-05-25 13:27:00) [11]


> clickmaker ©   (25.05.07 13:21) [10]
> тьфу, блин, там же кавычки
> between по строкам, а Виталий? то ли ты написал?

Написал-то то, но с пробелами разобраться не может :-))


clickmaker   (2007-05-25 13:21:00) [12]

тьфу, блин, там же кавычки
between по строкам, а Виталий? то ли ты написал?


stone   (2007-05-25 13:18:00) [13]


> clickmaker ©   (25.05.07 12:57) [8]
> а between разве не включительно?

мда, в данном случае будет включительно :)


clickmaker   (2007-05-25 12:57:00) [14]

а between разве не включительно?

какая субд хоть, Виталий?


stone   (2007-05-25 12:53:00) [15]

N_TEL >= 700000 AND N_TEL <= 799999


ЮЮ   (2007-05-25 12:47:00) [16]

> а ADOQuery1 выдает 6
> Посмотрел в таблице Temp_Start.

Не понятно... Если хотя бы ADOQuery1.RecordCount посмотрел бы. А то ... Бред какой то...
А в таблицу куда пишет смотрел?


Плохиш   (2007-05-25 12:46:00) [17]


> Vitaliy12 ©   (25.05.07 12:32) [2]
> реально существующих в Temp_Start. Количество записей соответствующих
> запросу в Temp_Start допустим 7, а ADOQuery1 выдает 6. При
> пошаговом режиме ( F7) записей получается 7
.


> Vitaliy12 ©   (25.05.07 12:41) [4]
> >Откуда знаешь?
>
> Посмотрел в таблице Temp_Start.

Значит 7я запись не выполняет заданное условие, тут без вариантов.

PS. Хотелось бы узнать, как связаны две выделенные цитаты?


Vitaliy12   (2007-05-25 12:41:00) [18]

>Откуда знаешь?

Посмотрел в таблице Temp_Start.


ЮЮ   (2007-05-25 12:39:00) [19]

> а ADOQuery1 выдает 6

Откуда знаешь?

>При пошаговом режиме ( F7) записей получается 7. Значит так и есть. Но и без пошагой отладки цикл while not ADOQuery1.Eof do должен отработать 7 раз.


Vitaliy12   (2007-05-25 12:32:00) [20]

реально существующих в Temp_Start. Количество записей соответствующих запросу в Temp_Start допустим 7, а ADOQuery1 выдает 6. При пошаговом режиме ( F7) записей получается 7. Где Ошибка?

Всем Спасибо!


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо