Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
15-1363547215
Дмитрий С
2013-03-17 23:06
2013.08.18
У кого английский Photoshop CS6 (64)


15-1363638605
Юрий
2013-03-19 00:30
2013.08.18
С днем рождения ! 19 марта 2013 вторник


15-1363552203
Юрий
2013-03-18 00:30
2013.08.18
С днем рождения ! 18 марта 2013 понедельник


15-1360614602
Юрий
2013-02-12 00:30
2013.08.18
С днем рождения ! 12 февраля 2013 вторник


2-1355292341
Medoed
2012-12-12 10:05
2013.08.18
Как закодировать файл в base64





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский