Форум: "Базы";
Текущий архив: 2013.08.18;
Скачать: [xml.tar.bz2];
Вниз[D2010] Магия мыши в TSQLQuery + DateTimePicker Найти похожие ветки
← →
megavoid (2010-12-15 12:39) [40]> А зачем ты обращаешься к несуществующему параметру?
я к нему не обращаюсь. это я пробовал [21], [24]
← →
Ega23 © (2010-12-15 12:39) [41]
> Но как в таком случае мне отследить событие окончания приезда
> всех данных? Я положился на пример использования dbExpress,
> где так и было open - for .. recordcount - next - close
> - и всё работает.Буратино был тупой,
Буратино был тупой,
Буратино был тупой,
Буратино был тупой,
Тупой как дрова,
Тупой как дрова,
Тупой как дрова,
Тупой как дрова
(с) Псой Короленко.
← →
sniknik © (2010-12-15 12:42) [42]> сделал сразу же, результат в [8]
там нет результата, там уверения "все правильно".
вот если бы были приведены варианты ответов, с мышкой(ошибка) и без(ок), вот тогда "результаты".
> перечислять их все через запятую?
именно так рекомендуется в любом мануале любого (пока не встречал исключений) sql сервера.
> вот тот самый метод полностью
жуть. как сценарист ужастиков не пробовался? :)
во первых параметры
во вторых for j := 0 to Qry.RecordCount-1 do ???
в третьих определение по имени поля внутри цикла
в четвертых нет дизейбла контролов (датасет/стринггрид)
в пятых ошибки вести в лог, и разделять в каком блоке произошли, абсолютно одинаковые не информативны.
в шестых Application.ProcessMessages; в цикле позволяет извне выполнить "левые" операции, например закрытие/перезапрос запроса, т.к. сам "кверик" - глобальная переменная (экономишь?), где проверка после него?
в седьмых сама "идея" перекладки в стрингрид бред.
ну и в восьмых код без применения "советов", нафига он нужен? убедить нас что все правильно?
← →
megavoid (2010-12-15 12:46) [43]гм, признаю, я лох
стоило заменитьfor j := 0 to Qry.RecordCount-1 do begin
наwhile not Qry.Eof do begin
И всё стало прекрасно. Никакой больше ошибки.
Только по-прежнему непонятно, почему возникала - даже если предположить, что recordcount в текущий момент возвращает количество записей меньшее, чем есть на самом деле, то меньше - не больше, и тогда бы я видел данные не полностью - а они были полностью.
← →
Ega23 © (2010-12-15 12:49) [44]14 часов, 33 поста.
Может завязать отвечать на вопросы, раз ответы нафиг никому не нужны?
И конкуренции меньше на рынке будет...
← →
Anatoly Podgoretsky © (2010-12-15 12:58) [45]
> Ты его, похоже, с Мегавольтом путаешь.
Не путаю, смотри пост 28
← →
12 © (2010-12-15 12:58) [46]
> Anatoly Podgoretsky © (15.12.10 12:34) [35]
> > но, если
> > TDateTime(Trunc( datetimepicker.date))
> Ты зачем так делаешь, вроде бы достаточно грамотный программист.
от отчаяния, когда перепробовал сначала много способов, логически более очевидных.
Ну вот не найду никак ту тему, жалко..
короче, ну дык и пишу же
case Q.Params[i].DataType of
ftDateTime: Q.Params[i].AsDateTime := P[i];
else Q.Params[i].Value := P[i];
вот все равно, просто trunc от startoftheday получался, что отличался
← →
Anatoly Podgoretsky © (2010-12-15 12:58) [47]> megavoid (15.12.2010 12:39:40) [40]
Я не пристаю
(с) Тайна третей планеты.
← →
Ega23 © (2010-12-15 13:03) [48]
> Не путаю, смотри пост 28
пардон, спутал.
> Ну вот не найду никак ту тему, жалко..
> короче, ну дык и пишу же
параметры вручную прописывал, или по Paramcheck получил?
просто с ручными у меня никогда никаких проблем не было, ни под MSSQL, ни под Postgres, ни под FB.
Да, это более муторное занятие. Писанины больше. Но зато никаких проблем.
← →
Anatoly Podgoretsky © (2010-12-15 13:06) [49]> 12 (15.12.2010 12:58:46) [46]
Загубишь ты так промышленность нашу.
← →
megavoid © (2010-12-15 13:29) [50]@sniknik
там есть результат.
без(ок), с мышкой - получали мессаджбокс
Qry: Field "dtime" not found
SELECT * FROM z WHERE ddate="2010-14-12";
[OK]
> именно так рекомендуется в любом мануале любого (пока не встречал исключений) sql сервера.
И если на следующий день заказчик захочет добавить ещё одно поле в базу, придётся ходить и везде его приписывать? В других запросах, где мне требуются только отдельные поля, я указываю их. Если нужны все - ставлю *.
Сервер MySQL гордо и одиноко стоит на core i5, 4 Гб, и по всем логам не напрягает процессор больше чем на 1% в час пик. Расширения не планируется, так что его не жалко.
> жуть. как сценарист ужастиков не пробовался? :)
Обязательно попробую после этой трёхстраничной простыни ужасов :)
> во первых параметры
ну сделаю я Qry.Params.Add(ddate=date); - это будет мне очень неудобно - sql запрос req конструируется разный, в разных местах, с разными параметрами
> во вторых for j := 0 to Qry.RecordCount-1 do ???
это да, я лох, уже догадался сам :)
> в третьих определение по имени поля внутри цикла
это из области фильмов ужасов, ага, но - работает
> в четвертых нет дизейбла контролов (датасет/стринггрид)
нет. юзеры всё равно ничего не успеют сделать, пока получаем данные
сильно подозреваю, что тоже из ужастиков
> в пятых ошибки вести в лог, и разделять в каком блоке произошли, абсолютно одинаковые не информативны.
модуль лога пишется, скоро будет
> Application.ProcessMessages;
да, не подумал. Но извне, пока работает FillGrid, никаких сообщений не придёт - всё однопоточное. Разве что может быть вариант, когда юзер нажмёт обновить, и, не дождавшись, снова нажмёт обновить - тогда в qry получится полная каша. На практике такого не случалось ни разу.
> перекладки в стринггрид
В полном соответствии с требованиями заказчика. Для справки, в этом же проекте совсем рядом есть DBGridы, прекрасно работающие - но перекладывать в стринггрид мне всё равно пришлось - вот отсюда и этот страхокод :)
> ну и в восьмых код без применения "советов", нафига он нужен? убедить нас что все правильно?
всё применял, все они в коде, всем спасибо за ответы!
← →
Anatoly Podgoretsky © (2010-12-15 13:47) [51]> megavoid (15.12.2010 13:29:50) [50]
Ну так нету же, правильно сообщает, там вообще никаких параметров нет.
← →
Anatoly Podgoretsky © (2010-12-15 13:48) [52]> megavoid (15.12.2010 13:29:50) [50]
"И если на следующий день заказчик захочет добавить ещё одно поле в базу,
придётся ходить и везде его приписывать?"
Я уже говорил, что ленивым нечего делать в программирование. Тебе надо в
менеджеры и чтобы кресло пошире.
← →
Ega23 © (2010-12-15 13:54) [53]
> И если на следующий день заказчик захочет добавить ещё одно
> поле в базу, придётся ходить и везде его приписывать? В
> других запросах, где мне требуются только отдельные поля,
> я указываю их. Если нужны все - ставлю *.
Вот теперь я, как администратор БД, беру и меняю порядок полей в таблице. Или, например, добавлю в данную таблицу блоб-поле, в которой битмап для каждой записи будет лежать. Метра так на 2.
И теперь ты по своей * будешь тащить на каждый чих по 100 записей дополнительно 200 мегабайт картинок.
Это первое.
Второе: а тебе и так и так придётся переписывать. Добавлять fieldByName и заносить его в определённый столбец твоего StringGrid.
> это будет мне очень неудобно - sql запрос req конструируется
> разный, в разных местах, с разными параметрами
скажи, а зачем такой изврат нужен? Ну, в смысле, один DataSet на всё приложение? Заведи себе их столько, сколько нужно. Аккуратно пропиши параметры. Выстави Prepared (скомпилируй заранее).
Получишь афигенный выигрыш на скорости, проверено неоднократно.
> > в третьих определение по имени поля внутри цикла
> это из области фильмов ужасов, ага, но - работает
Вот тут я со sniknik не согласен. FieldByName - в целом более правильное обращение. Fields[Index] - это только если ты строго уверен, что НД пришёл в строго определённом порядке полей. Что сильно повышает неустойчивость в случае, если работаешь с хранимой процедурой, а её код может кто-то модифицировать.
> нет. юзеры всё равно ничего не успеют сделать, пока получаем
> данные
> сильно подозреваю, что тоже из ужастиков
Зря подозреваешь. Смотри код TDataSet. Года 2.5 -3 назад аккурат на этом форуме я вопрос поднимал. Простейшая операция disable|enable controls дала прирост производительности то ли в 30 раз, то ли в 70.
> Но извне, пока работает FillGrid, никаких сообщений не
> придёт - всё однопоточное.
Да ну? Ты, видать, плохо разбираешься, что такое Application.ProcessMessages.
простой пример.
У тебя, запрос, который выполняется 5 секунд (это только Open). За эти 5 секунд ты наделал кучу всякой разной фигни мышкой. Что будет - предлагаю тебе самому на чистом проекте испытать.
← →
sniknik © (2010-12-15 14:09) [54]> Вот тут я со sniknik не согласен. FieldByName - в целом более правильное обращение. Fields[Index] - это только если ты строго уверен
не выдумывай отсебятины... Fields[Index] я сам нигде не использую и другим не советую.
> в третьих определение по имени поля внутри цикла
где тут Fields[Index]? здесь про "внутри цикла", вынести "за" и все дела, а не менять на что то самопридуманное.
← →
Ega23 © (2010-12-15 14:11) [55]
> не выдумывай отсебятины... Fields[Index] я сам нигде не
> использую и другим не советую.
Тогда я тебя не понял. Поясни "в третьих определение по имени поля внутри цикла"
← →
sniknik © (2010-12-15 14:14) [56]> Поясни "в третьих определение по имени поля внутри цикла"
> вынести "за" и все дела
← →
megavoid © (2010-12-15 14:16) [57]
> Вот теперь я, как администратор БД, беру и меняю порядок
> полей в таблице. Или, например, добавлю в данную таблицу
> блоб-поле, в которой битмап для каждой записи будет лежать.
> Метра так на 2.
В данном конкретном случае администратор БД управляется мной же, и я просто не пропущу большой блоб. Когда это писалось, я закладывался на полный контроль всего комплекса со стороны меня, что и позволяет мне достаточно вольно писать мой говнокод, точно помня что, где и как расположено.
> скажи, а зачем такой изврат нужен? Ну, в смысле, один DataSet
> на всё приложение?
Экономия, всё верно выше подметили. Над завести много датасетов - подумаю.
> Простейшая операция disable|enable controls дала прирост
> производительности то ли в 30 раз, то ли в 70.
Прописал disable/enable. На глазок по скорости выполнения то же самое, но глазок не профайлер, вечером замерю без и с disablecontrols.
> Application.ProcessMessages
Там только ради WM_PAINT. Не 5, а 2-3 секунды :) WinSight у меня частенько открыт. Ну, даже если придёт LBUTTONDOWN или CLOSE - как это собьёт мне Query? Если пришлют DESTROY - ну тут и так понятно что хана, никакой квери уже нафиг не нужен будет.
ЗЫ. А кресло у меня большое-большое, ага :) А программирование мне больше по душе :)
← →
megavoid © (2010-12-15 14:19) [58]> > вынести "за" и все дела
Куда "за"? Оно потому и внутри цикла, что я получаю данные из полей в цикле.
← →
Anatoly Podgoretsky © (2010-12-15 14:19) [59]> Ega23 (15.12.2010 13:54:53) [53]
Ты где такие маленькие битмапы нашел.
← →
Anatoly Podgoretsky © (2010-12-15 14:22) [60]> Ega23 (15.12.2010 13:54:53) [53]
"Fields[Index] - это только если ты строго уверен, что НД пришёл в строго
определённом порядке полей."
Уверенность надо обретать в явном указание полей, а тогда можно и Fields[i]
← →
Anatoly Podgoretsky © (2010-12-15 14:26) [61]> megavoid (15.12.2010 14:16:57) [57]
" и я просто не пропущу большой блоб."
Не зарекайся. Кроме того все ты не проконтролируешь, на нормальных фирмах
это разделено между разными людьми, и первому человеку совсем не обязательно
знать, что админ добавил blob поле. Не его это дело, его дело писать
правильные запросы, а не лениться. Молчу уж про параметры и оптимизатор.
← →
megavoid © (2010-12-15 14:27) [62]> Уверенность надо обретать в явном указание полей, а тогда
> можно и Fields[i]
Ага, укажу я поля в запросе явно, а SQL обязан мне их в таком же порядке вернуть? Я уж лучше через .FieldByName. А то и вообще Ega23 придёт и порядок полей поменяет, а с fieldbyname мне это фиолетово.
← →
sniknik © (2010-12-15 14:28) [63]> Куда "за"? Оно потому и внутри цикла, что я получаю данные из полей в цикле.
за цикл, и не получение данных, а определение по имени. блин.
что так сложно понять, до цикла определить поле и запомнить его в переменную, в цикле использовать ее.
> Прописал disable/enable. На глазок по скорости выполнения то же самое, но глазок не профайлер, вечером замерю без и с disablecontrols.
на ста записях заметно не будет, вот сто тысяч... другое дело. + главный "тормоз" будет/есть не в нем а в стринггриде. и даже если ему поставить "дизебле" (там как то по другому называется) на обновления, это тоже будет мелочь по сравнению с тем как он сам по себе тормозит. "из принципа" (по логике с которой сделан)
← →
sniknik © (2010-12-15 14:29) [64]> Ага, укажу я поля в запросе явно, а SQL обязан мне их в таком же порядке вернуть?
да.
хотя это и "всплыло" от не рекомендованного тут метода.
← →
Ega23 © (2010-12-15 14:29) [65]
> В данном конкретном случае администратор БД управляется
> мной же, и я просто не пропущу большой блоб. Когда это писалось,
> я закладывался на полный контроль всего комплекса со стороны
> меня, что и позволяет мне достаточно вольно писать мой говнокод,
> точно помня что, где и как расположено.
Дык нету у тебя полного контроля при *, пойми. Полный контроль - когда ты чётко выбираешь именно те поля, которые тебе нужны. В том самом порядке, который тебе нужен.
> Экономия, всё верно выше подметили. Над завести много датасетов
> - подумаю.
Ты не на том экономишь. Если аналогию провести, то ты сейчас экономишь на мусорных пакетах, выбрасывая всё что есть в один, а потом на мусорке его разгребать и по разным контейнерам складывать: туда - пищевые отходы, туда - стекло всякое и т.д.
Впрочем, это был ещё один совет. :)))
> Прописал disable/enable. На глазок по скорости выполнения
> то же самое, но глазок не профайлер, вечером замерю без
> и с disablecontrols.
Может и не дать, тут очень многое зависит непосредственно от компонента. Надо реализацию смотреть. Но в целом - надо писать, это правило хорошего тона.
> Там только ради WM_PAINT. Не 5, а 2-3 секунды :) WinSight
> у меня частенько открыт. Ну, даже если придёт LBUTTONDOWN
> или CLOSE - как это собьёт мне Query?
А ты возьми, зацепи окно мышкой и не отпускай. Потаскай его по экрану.Screen.Cursor := crSQLWait;
try
with DataSet do
begin
Open;
........
end;
finally
Screen.Cursor := crDefault;
end;
← →
megavoid © (2010-12-15 14:32) [66]>>Кроме того все ты не проконтролируешь, на нормальных фирмах это разделено между разными людьми, и первому человеку совсем не обязательно знать, что админ добавил blob поле.
Не зарекаюсь, но с 99.999% вероятностью на протяжении жизни этого проекта админ не будет трогать бд.
← →
Ega23 © (2010-12-15 14:38) [67]
> Ага, укажу я поля в запросе явно, а SQL обязан мне их в
> таком же порядке вернуть?
Естественно.
Также, как и то, что сервер тебе произвольный порядок самих записей может выдать, если ты явно Order By не указал. На одинаковом запросе.
> + главный "тормоз" будет/есть не в нем а в стринггриде.
> и даже если ему поставить "дизебле" (там как то по другому
> называется)
По всей видимостиStringGrid1.Rows.BeginUpdate\EndUpdate
проверять лениво.
← →
Anatoly Podgoretsky © (2010-12-15 14:38) [68]> megavoid (15.12.2010 14:27:02) [62]
Ты даже не преставляешь как SQL работает, да именно обязан.
Какой "Ega23 придёт и порядок полей поменяет" тебе порядок полей в твоей
программе поменяет, окстись.
← →
Anatoly Podgoretsky © (2010-12-15 14:39) [69]> sniknik (15.12.2010 14:28:03) [63]
На stringgrid можно много выиграть, очень медленный компонент.
← →
Ega23 © (2010-12-15 14:40) [70]
> Не зарекаюсь, но с 99.999% вероятностью на протяжении жизни
> этого проекта админ не будет трогать бд.
А ты не допускаешь мысли, что кроме данного проекта ты в своей жизни ещё и другими будешь заниматься? Где данное разделение будет в порядке вещей?
Учись писать правильно с самого начала. Тебе не вредные советы дают, тут люди не один такой "кинозал" написали, а по десятку (если не больше).
← →
Anatoly Podgoretsky © (2010-12-15 14:41) [71]> sniknik (15.12.2010 14:29:04) [64]
А я и не рекомендовал, просто указал, что и это надежный метод при
правильном написание, а не при SELECT *
В контексте необходимости явного указания полей.
← →
Ega23 © (2010-12-15 14:42) [72]
> а не при SELECT *
А чё вы все DML-команды в UPPER CASE пишете?
Это так, оффтопик...
← →
Anatoly Podgoretsky © (2010-12-15 14:42) [73]> Ega23 (15.12.2010 14:29:05) [65]
Конечно рекомендации, ничего и другого в форуме не остается, ведь уволить то
его за непрофессионализм мы не можем.
← →
Anatoly Podgoretsky © (2010-12-15 14:45) [74]> megavoid (15.12.2010 14:32:06) [66]
Живо предание, я столько полей добавил в посторонние базы, они мне просто
нужны, и что ты думаешь я оповещал разработчиков, правда и они на меня тоже
плевали, поля типа bit собаки постоянно переделывают в shortint (у них
"ошибка" в программах обновления). Вот так и боремся с друг другом.
← →
Anatoly Podgoretsky © (2010-12-15 14:47) [75]> Ega23 (15.12.2010 14:42:12) [72]
Я пишу так как мне удобно, а удобно мне в Borland Pascal стиле. То есть
каждое слово с большой буквы и без соокращений, кроме редких случаев. Я не
боюсь много букав.
← →
Ega23 © (2010-12-15 14:47) [76]
> поля типа bit собаки постоянно переделывают в shortint
> (у них "ошибка" в программах обновления).
Ну дык. shortint в стандарте есть. bit - нету. :)
Даже, ЕМНИП, byte (tinyint) нету.
← →
Ega23 © (2010-12-15 14:48) [77]
> а удобно мне в Borland Pascal стиле.
Тогда почему SELECT, а не Select?
← →
sniknik © (2010-12-15 14:52) [78]> А чё вы все 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) [79]Уж не один год пишу, много кинозалов получалось, какие-то хорошие, какие-то не очень. Ко всем советам стараюсь прислушиваться. Вот с базой - впервые у меня проект, отсюда много непониманий. За последние сутки узнал про SQL больше, чем за месяц чтения мануалов. Про * и поля понял, укажу их по порядку. Хотя админ НЕ будет их трогать.
Да, у грида beginupdate/endupdate, как и у listview. В listview выигрыш по скорости заметен на глаз уже при 500 записях. Кстати, при каком-то стиле listview ведёт себя как и датасет, тоже показывает и подгружает только то, что на экране.
← →
Anatoly Podgoretsky © (2010-12-15 14:56) [80]> Ega23 (15.12.2010 14:47:16) [76]
Дело не в стандарте, дело происходит на MS SQL а разработчик поддерживает
две системы одновременно MS SQL и Акцесс, где такого типа нет, поэтому я и
взял в кавычки, но почему они гады не ограничиваются своими полями и лезут в
мои собственные, видимо немного схалтурили, упростили себе жизнь. По идее
надо бы было переделать программу, но больно удобен bit
Страницы: 1 2 3 вся ветка
Форум: "Базы";
Текущий архив: 2013.08.18;
Скачать: [xml.tar.bz2];
Память: 0.66 MB
Время: 0.006 c