Форум: "Начинающим";
Текущий архив: 2007.06.17;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.041 c