![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ADOQUERY - Где я не прав? [D7]
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. Где Ошибка?
Всем Спасибо!