Здравствуйте, гость ( Вход | Регистрация )
Дата поста: | В теме: | За сообщение: | Спасибо сказали: | ||
---|---|---|---|---|---|
9.2.2012, 9:45 | просмотр таблицы с меняющимися данными, запоминание и выделение тек строки | Про Т2 и прзиционирование: Что-то я не очень понял, если для Т2 используется та же структура, то почему не использовать ID для позиционирования. В противном случае не ясно что делать при наличии 2х и более одинаковых (или очень близких) значений PARAM в массиве. Как-то ты же должна задавать на этом массиве порядок/сортировку для выборки. Иначе можно получить данные совершенно не в том порядке и позиционирование будет бессмысленно, потому что в "уже просмотренные" попадут совсем ни те данные. Если порядок таки задан - то и запоминать позицию нужно ориентируясь на него. Пример: Цитата Поступает 1-й раз массив со значениями PARAM (1.23, 2.34, 300.45, 445.00), оператор начинает его просмотр, делает текущей запись со значением 300.45, Куда позиционироватся, если следующий запрос вернёт: PARAM (445.00, 2.34, 300.45, 1.23) или PARAM (1.23, 2.34, 300.45, 300.45, 300.45, 300.45, 445.00) или PARAM (3.38, 1.32, 300.45001, 455.01, 300.44999) И что это будет значить для оператора? Про способы использования: 1. Я имел в виду, что ты всё оставляешь как сейчас, но при генерации текста запроса вместо данных подставляешь заполнители (например символы "?"). После этого биндишь переменные (как в справке по QSqlQuery) В этом случае данные в сервер попадают минуя преображение в строку у тебя в коде и обратно на сервере. Меньше преобразований - меньше накапливается ошибок. Причём объект QSqlQuery после prepare можно не удалять, а сохранить где-то, и для следующего запроса только подставить (забиндить) новые параметры. В случае Т3 можно сделать кеширование. Например QMap где ключом будет состав изменяемых полей а значением - препарированный запрос. 2. В триггере перед изменением можно проверить - если поле опциональное, восстановить предыдущее значение, например:
3. Всё то же самое - определение состава обновляемых полей и выбор варианта запроса. Или его можно собрать в процедуре и выполнить через execute statiment. Практически тот же вариант 1, но перенесённый на сервер. Кстати, что делается в случае если param == null_double для записи с новым ID? Ну и я бы стал делать вариант 2 и 3 только в том случае, если данные в базу могут поступать из разных приложений. В противном случае это дополнительное усложнение схемы данных. |
Steklova Olga, | ||
8.2.2012, 8:51 | просмотр таблицы с меняющимися данными, запоминание и выделение тек строки | 1) Ты же вроде бы писала, что T2 ты очищаешь и вставляешь данные по новой. Т. е. в этом случае у тебя только 1 sql для удаления и 1 для вставки. Как использовать биндинг вроде очевидно Но даже если рассматривать более общий случай, который ты описываешь, то можно использовать биндинг несколькими способами: 1. Генерить параметрический sql (без данных) для каждого случая. 2. Использовать всегда полный insert/update с биндингом а в триггерах разбираться какие реально поля изменяются 3. Вынести логику разборок с данными на сервер - в сохранённую процедурку. Во всех 3х случаях кроме первого дополнительно к удобству работы с данными получаем ускорение на единственной генерации запроса клиентом и подготовке (препарации) запроса сервером. Да и в 1ом случае можно добавить систему кеширования позволяющую воспользоваться этими преимуществами. 2) Почему тогда просто не привязываться к порядковому номеру и верхней видимой строке? Других-то ориентиров у пользователя всё равно нету... |
Steklova Olga, | ||
7.2.2012, 8:11 | просмотр таблицы с меняющимися данными, запоминание и выделение тек строки | Дело было в том, что при формировании строки запроса на добавление записи в таблицу БД я переводила значение в строку с помощью setNum, но использовала prec = 6 (по умолчанию). Заменила s.setNum(d, 'f') на s.setNum(d, 'f', 10). Проверила работу, указав в Qt::DisplayRole для PARAM формат
4) Остался вопрос, какое "универсальное" (для любого поля типа DOUBLE PRECISION) значение prec лучше указать у меня в setNum при формировании запроса в общем случае, если таких параметров как PARAM у меня несколько, и я не знаю заранее их точный диапазон и точность, только знаю, что DOUBLE PRECISION подходит. prec = 15 что-ли? Используй параметризированные запросы и биндинг переменных. Тогда тебе не нужно будет руками форматировать данные и натыкатся на точность. Ну и почитай про числа с плавающей запятой - будешь лучше ориентироватся. По поводу стартового вопроса было бы неплохо уточнить, зачем нужна вообще выделенная строка в таблице T2, если данные там постоянно меняются. Какую она несёт функциональную нагрузку? Ежели это понять, можно дальше думаьт про механизм обеспечения постоянства этого выделения. |
Steklova Olga, | ||
27.10.2011, 8:15 | Баги в форуме | Страница поиска: http://crossplatform.ru/search.php отображается «кракозябрами». Похоже дело в том, что в заголовке стоит кодировка windows-1251 а весь текст в utf-8 |
Admin, | ||
20.9.2010, 8:01 | управление версиями исходников | Таки я бы посоветовал таки mercurial или git вместо SVN. У свина только одно приимущество - тортилка под виндой с интеграцией в Explorer, но и её довольно быстро догоняют. Ежели же с комм. строкой дружишь, или среда разработки нормальная, то свини сливает по полной. Тем более если кодишь дома и на работе одни и те же проекты. |
AD, | ||
19.7.2010, 8:00 | У камрада igor_bogomolov сегодня день рождения! | Счастье и радости! |
igor_bogomolov, | ||
21.5.2010, 8:16 | Последняя mingw'a | Andrewshkovskii, | |||
23.4.2010, 8:46 | выход индекса за пределы дозволеного, философия | В Винде возникает системное исключение STATUS_ACCESS_VIOLATION как правильно указал Andrewshkovskii. Некоторые компиляторы в некоторых режимах умеют переводить системные исключения винды в исключения С++. Например MSVC с нужной опцией или багланд в режиме совместимости с делфой. В унихе возникает системный сигнал SIGSEGV. Читай, например, в википедии. |
Litkevich Yuriy, | ||
22.4.2010, 13:03 | Использование сторонних библиотек | Можно использовать dll-ку собранную одним компилятором в другом если она удовлетворяет следующему набору условий: * dll-ка экспортирует чисто С-шные функции. * из неё не вылетает исключений. * структуры содержат только примитивные данные или другие такие же структуры. * структуры передаются только по указателям. * память, выделенная в dll-ки в ней же и освобождается. * dll-ка не пытается освободить память выделенную приложением. * не используются зависимые от компилятора соглашения о вызовах. * не используются зависимые от компиляторов расширения dll-ек (типа пакетов от багланда). Уф, вроде всё. Если какие-то из этих требований будут нарушены, то нужно смотреть по месту... Да, маленький бонус: полностью абстрактные структуры (интерфейсы) использовать можно. |
azure, | ||
22.4.2010, 7:27 | выход индекса за пределы дозволеного, философия | Litkevich Yuriy, | |||
16.4.2010, 18:07 | RTEMS и cygwin | А чем не устраивает дока с офф. сайта: http://www.rtems.com/ |
AD, | ||
15.4.2010, 10:17 | Нюанс оператора вывода в поток | Litkevich Yuriy, | |||
25.3.2010, 19:17 | Безо всяког копирайта! | Litkevich Yuriy, | |||
11.2.2010, 8:16 | не могу скомпилировать curl с SSL | А заголовочники в include закинул? Да и зачем руками компилировать? Вроде всё можно выдернуть: http://curl.haxx.se/download.html http://curl.haxx.se/latest.cgi |
deex, | ||
9.2.2010, 8:18 | Солнечное Галло | [attachment=941:07022010606.jpg] [attachment=942:07022010613.jpg] |
BRE, | ||
12.1.2010, 20:49 | Вызов из Perl библиотеки написанной на С++ (Qt) | Ключевые слова: perl extension. Одна из первых выданных гуглом ссылок: Getting started with Perl Extensions. |
AD, | ||
21.12.2009, 9:25 | проблемка с шаблонными функциями | 2 voipp Определение шаблонных функций - это их код - его ты привёл в первом куске кода. Во втором - объявления. Подобная ошибка может появится тогда, когда определение шаблона находится в одном С++ файле а его использование - в другом. Наиболее просто исправляется помещением определения в заголовок (*.h) |
DOGG, | ||
2.12.2009, 14:25 | Проблема при переходе на 4.6 | Да. Убрать const можно только со значениями по умолчанию. Простой пример:
Как компилятор должен это обработать? Куда запишется 10 после вызова foo() в main-е? |
Litkevich Yuriy, | ||
4.9.2009, 8:11 | файл windows.h | PlatformSDK нужно ставить отдельно: http://www.zedwood.com/article/134/visual-...he-platform-sdk |
Litkevich Yuriy, | ||
28.8.2009, 8:10 | typeid(*<class>).name() | Таки стандарт не определяет что за строку будет возвращать typeinfo::name(). Гарантируется только что строки будут разные для разных типов и одинаковые для одинаковых. Так что там могут хоть sha1 или md5 вернуть Gcc возвращает мангленное имя. Вроде MSVC & Borland тоже. Кстати, с gcc идёт библиотечка которая умеет манглить/деманглить имена. Только вот забыл как называется. |
Litkevich Yuriy, | ||
17.8.2009, 8:44 | BRE | Счастья! |
BRE, | ||
13.8.2009, 21:07 | Небольшие скрипты для выполнения в командной строке |
|
AD, | ||
4.8.2009, 10:35 | C++: как выбрать тип переменной во время выполнения? | Всё есть. |
AD, | ||
28.7.2009, 10:43 | C++: как выбрать тип переменной во время выполнения? | 2 AD Всё бы тебе на лисапедах ездить. Boost.Any Boost.Variant Локи - прикольная библиотечка для учёбы, но для промышленного использования лучше таки Boost. |
AD, igor_bogomolov, | ||
23.7.2009, 10:39 | Языки программирования | Tonal, всё равно туго, это что-то вроде динамической типизации (определение типа переменной во время выполнения)? Нет. Типизация остаётся статическая. Компилятор во многих случаях сам в состоянии вывести тип на этапе компиляции. В случае, если тип не однозначен получишь ошибку. Вот список того, что вошло в gcc 4.4.0 из нового стандарта. Лямбды не вошли. И концепты. |
AD, | ||
Текстовая версия | Сейчас: 4.10.2024, 17:30 |