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

Вниз

[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;
Скачать: CL | DM;

Наверх




Память: 0.67 MB
Время: 0.01 c
15-1363079964
картман
2013-03-12 13:19
2013.08.18
как пишется


15-1363737352
brother
2013-03-20 03:55
2013.08.18
Мерцание полос


2-1353997983
Mikishanya
2012-11-27 10:33
2013.08.18
Stringgrid удаление пустых строк


2-1355233256
Дима
2012-12-11 17:40
2013.08.18
"Неопознанная ошибка" при загрузке проекта


15-1363171562
Jeer
2013-03-13 14:46
2013.08.18
Почти парад планет в эти дни -