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

Вниз

ADOQUERY - Где я не прав?   Найти похожие ветки 

 
Vitaliy12 ©   (2007-05-25 12:22) [0]

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

Помогите, заклинило. Не могу найти ошибку. В таблице 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 12:28) [1]

но на выходе количество записей на одну меньше реально существующих
реально существующих где? в Temp_Start или в ADOQuery1? Может из-за BETWEEN "700000" AND "799999" они в запрос не попали?


 
Vitaliy12 ©   (2007-05-25 12:32) [2]

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

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


 
ЮЮ ©   (2007-05-25 12:39) [3]

> а ADOQuery1 выдает 6

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

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


 
Vitaliy12 ©   (2007-05-25 12:41) [4]

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

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


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


> 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. Хотелось бы узнать, как связаны две выделенные цитаты?


 
ЮЮ ©   (2007-05-25 12:47) [6]

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

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


 
stone ©   (2007-05-25 12:53) [7]

N_TEL >= 700000 AND N_TEL <= 799999


 
clickmaker ©   (2007-05-25 12:57) [8]

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

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


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


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

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


 
clickmaker ©   (2007-05-25 13:21) [10]

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


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


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

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


 
Vitaliy12 ©   (2007-05-25 13:34) [12]

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

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


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

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


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


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

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


 
Vitaliy12 ©   (2007-05-25 13:57) [15]


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


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


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

Access XP


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


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

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


 
Anatoly Podgoretsky ©   (2007-05-25 14:05) [17]

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

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


 
Vitaliy12 ©   (2007-05-25 14:16) [18]


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


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

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


 
Anatoly Podgoretsky ©   (2007-05-25 14:28) [19]

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

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


 
Vitaliy12 ©   (2007-05-25 14:53) [20]


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


Оскорбился!
Сделал 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". Все равно не видит последнюю строку.

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


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


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

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



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

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

Наверх




Память: 0.52 MB
Время: 0.021 c
2-1180001170
Углук
2007-05-24 14:06
2007.06.17
Ресурсы не грузятся


2-1180086410
Darvin
2007-05-25 13:46
2007.06.17
Ошибка "OLE error 800A03EC" при передаче StringGrid в Excel


3-1174998768
rm
2007-03-27 16:32
2007.06.17
оптимизация работы с БД


2-1180123811
Dmitry_177
2007-05-26 00:10
2007.06.17
оператор case


2-1180428969
Василий
2007-05-29 12:56
2007.06.17
Просмотр ячейки в StringGrid