![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
[D2010] Магия мыши в TSQLQuery + DateTimePicker [MySQL]
megavoid © (2010-12-14 20:13:00)Здравствуйте, Мастера!
Столкнулся с такой проблемой:
Есть форма, на ней stringgrid, sqlquery, datetimepicker. Юзеры выбирают дату в datetimepicker, в onChange конструируется select с нужной датой, выполняется через query, в цикле (query.next) читаю ответ от query и заполняю stringgrid нужными значениями. Всё вроде бы шоколадно, но есть одно но - если выбирать значение в picker'e мышью (sic!), то query при попытке интерпретировать ответ (.asString, .asInteger) выдаёт ошибку: Query: Field 'N1' not found. Не всегда выдаёт, произвольно, один раз из десяти-пятнадцати. Если же выбирать дату в пикере стрелочками, всё прекрасно, никакой ошибки. Более того, по событию FormCreate отрабатывает datetimepickerchange(self), и при запуске проги в гриде тоже всё прекрасно отображено.
Усугубляет разброд в моём мозге то, что поидее сообщения вообще выдаваться не должно бы (try..except), а оно выдаётся :)
Выглядит же этот безобразный цикл примерно так:
try
Query.Open;
for j := 0 to query.RecordCount-1 do begin
// здесь идут блоки s := fieldbyname .asstring; .asinteger; итд
try
S := query.FieldByName('N1').AsString;
except
end;
// здесь мы эти s пихаем в stringgrid
Query.Next;
Application.ProcessMessages;
end;
finally
Query.Close;
end;
При возникновении этого глюка отладчик вылетает в окно CPU, а не на строку между try..except. Стэк вызовов процедур получается такой:
KERNELBASE.RaiseException
DatabaseError
DatabaseErrorFmt
Dataset.FieldByName
стоп указывает на инструкцию leave
перед ней call dword ptr [$7555116c] - что там у меня по этому адресу - Готт его знает, перешёл туда - там jnbe, перед ней ещё пара инструкций и нули, много-много нулей :) Увы, мой ассемблер закончился в досе на уровне mov ah, 9 int 21h, так что мне это ровным счётом ничем не помогло :)
Вопрос: что же всё-таки её вызывает, ошибку эту, если мышкой выбирать дату? Пока вопрос решён чисто по-русски, то есть юзеры (~80 человек) не выбирают мышкой, но мучит меня совесть и интерес профессиональный, что ж за фигня такая :)
Плиз хелп, всем заранее спасибо!
12 (2010-12-15 16:14:00) [1]вывод -> надо в дальтоники переходить
Anatoly Podgoretsky (2010-12-15 16:03:00) [2]> Ega23 (15.12.2010 15:45:29) [89]
Ну и какая разница, тот же блокнот, немного различается.
Профессионалу цвет только мешает. Он начинает думать, что этот зеленый
знает, а красный.
Ega23 (2010-12-15 15:45:00) [3]
> У меня в блокноте все черное
Блокнот 300 лет уже не использовал. Только notepad++.
Впрочем, это злостный оффтопик пошёл.
Anatoly Podgoretsky (2010-12-15 15:43:00) [4]> Ega23 (15.12.2010 15:21:25) [85]
У меня в блокноте все черное, в Дельфи есть варианты
Ega23 (2010-12-15 15:36:00) [5]
> в access?
Не, с ним не работаю.
Но в целом понял. Я всё в LowerCase начал писать, когда с Postgres-ом поработал. Там есть особенности case.
sniknik (2010-12-15 15:28:00) [6]> У меня цветом выделяются.
в access? зависишь от инструментов.
Ega23 (2010-12-15 15:21:00) [7]
> ну сравни
> SELECT username,usertype,priority FROM sysusers WHERE username
> LIKE '%ix'
> select username,usertype,priority from sysusers whwere username
> like '%ix'
У меня цветом выделяются.
Ega23 (2010-12-15 15:17:00) [8]
> Хотя админ НЕ будет их трогать.
Завтра возьмут на работу админа - и он будет их трогать.
Anatoly Podgoretsky (2010-12-15 15:00:00) [9]> megavoid (15.12.2010 14:52:19) [79]
Опять ты в угадайку играешь. Не важно будет он трогать или нет, ты не должен
об этом знать, это не твое, ты просто обязан писать правильно, чтобы
действия третьих сторон, тебя не затрагивали.
Anatoly Podgoretsky (2010-12-15 14:58:00) [10]> Ega23 (15.12.2010 14:48:17) [77]
Потому что я также и формат SQL поддерживаю, ключевые слова SQL писать с
большой буквы, я не хочу лезть в чужой монастырь, а вот мои поля - мое дело.
А их ключевые слова не мое. И читать в таком варианте удобно, тем более что
я не пишу в одну строку, а во множество и с отступами.
sniknik (2010-12-15 14:58:00) [11]> Кстати, при каком-то стиле listview ведёт себя как и датасет, тоже показывает и подгружает только то, что на экране.
в "стиле" ручной отрисовки наверное, с хранением в своих структурах.
Anatoly Podgoretsky (2010-12-15 14:56:00) [12]> Ega23 (15.12.2010 14:47:16) [76]
Дело не в стандарте, дело происходит на MS SQL а разработчик поддерживает
две системы одновременно MS SQL и Акцесс, где такого типа нет, поэтому я и
взял в кавычки, но почему они гады не ограничиваются своими полями и лезут в
мои собственные, видимо немного схалтурили, упростили себе жизнь. По идее
надо бы было переделать программу, но больно удобен bit
sniknik (2010-12-15 14:52:00) [13]> А чё вы все DML-команды в UPPER CASE пишете?
> Это так, оффтопик...
ну сравни
SELECT username,usertype,priority FROM sysusers WHERE username LIKE '%ix'
select username,usertype,priority from sysusers whwere username like '%ix'
+ "Query Analyzer"/Access так генерит, т.е. можно считать стандарт.
megavoid (2010-12-15 14:52:00) [14]Уж не один год пишу, много кинозалов получалось, какие-то хорошие, какие-то не очень. Ко всем советам стараюсь прислушиваться. Вот с базой - впервые у меня проект, отсюда много непониманий. За последние сутки узнал про SQL больше, чем за месяц чтения мануалов. Про * и поля понял, укажу их по порядку. Хотя админ НЕ будет их трогать.
Да, у грида beginupdate/endupdate, как и у listview. В listview выигрыш по скорости заметен на глаз уже при 500 записях. Кстати, при каком-то стиле listview ведёт себя как и датасет, тоже показывает и подгружает только то, что на экране.
Ega23 (2010-12-15 14:48:00) [15]
> а удобно мне в Borland Pascal стиле.
Тогда почему SELECT, а не Select?
Anatoly Podgoretsky (2010-12-15 14:47:00) [16]> Ega23 (15.12.2010 14:42:12) [72]
Я пишу так как мне удобно, а удобно мне в Borland Pascal стиле. То есть
каждое слово с большой буквы и без соокращений, кроме редких случаев. Я не
боюсь много букав.
Ega23 (2010-12-15 14:47:00) [17]
> поля типа bit собаки постоянно переделывают в shortint
> (у них "ошибка" в программах обновления).
Ну дык. shortint в стандарте есть. bit - нету. :)
Даже, ЕМНИП, byte (tinyint) нету.
Anatoly Podgoretsky (2010-12-15 14:45:00) [18]> megavoid (15.12.2010 14:32:06) [66]
Живо предание, я столько полей добавил в посторонние базы, они мне просто
нужны, и что ты думаешь я оповещал разработчиков, правда и они на меня тоже
плевали, поля типа bit собаки постоянно переделывают в shortint (у них
"ошибка" в программах обновления). Вот так и боремся с друг другом.
Ega23 (2010-12-15 14:42:00) [19]
> а не при SELECT *
А чё вы все DML-команды в UPPER CASE пишете?
Это так, оффтопик...
Anatoly Podgoretsky (2010-12-15 14:42:00) [20]> Ega23 (15.12.2010 14:29:05) [65]
Конечно рекомендации, ничего и другого в форуме не остается, ведь уволить то
его за непрофессионализм мы не можем.