crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

История благодарностей участнику Tonal ::: Спасибо сказали: 69 раз(а)
Дата поста: В теме: За сообщение: Спасибо сказали:
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. В триггере перед изменением можно проверить - если поле опциональное, восстановить предыдущее значение, например:
if (new.param is null or new.param = null_double) then
new.param = old.param;


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 просмотр таблицы с меняющимися данными, запоминание и выделение тек строки
Цитата(Steklova Olga @ 7.2.2012, 0:04) *
Дело было в том, что при формировании строки запроса на добавление записи в таблицу БД
я переводила значение в строку с помощью setNum, но использовала prec = 6 (по умолчанию).
Заменила s.setNum(d, 'f') на s.setNum(d, 'f', 10).

Проверила работу, указав в Qt::DisplayRole для PARAM формат
QString("%1").arg(value.toDouble(), 0, 'f', 10, QLatin1Char('0'));

4) Остался вопрос, какое "универсальное" (для любого поля типа DOUBLE PRECISION) значение prec лучше указать у меня в setNum при формировании запроса в общем случае, если таких параметров как PARAM у меня несколько, и я не знаю заранее их точный диапазон и точность, только знаю, что DOUBLE PRECISION подходит. prec = 15 что-ли? :rolleyes:

Используй параметризированные запросы и биндинг переменных. Тогда тебе не нужно будет руками форматировать данные и натыкатся на точность. :)

Ну и почитай про числа с плавающей запятой - будешь лучше ориентироватся. :)

По поводу стартового вопроса было бы неплохо уточнить, зачем нужна вообще выделенная строка в таблице 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 @ 21.4.2010, 16:41) *
...И к сожалению в С\С++ нет типа диаппазона...

boost::range
Litkevich Yuriy,
16.4.2010, 18:07 RTEMS и cygwin
А чем не устраивает дока с офф. сайта: http://www.rtems.com/
AD,
15.4.2010, 10:17 Нюанс оператора вывода в поток
Цитата(Litkevich Yuriy @ 12.4.2010, 17:29) *
я избегаю использовать for, т.к. его форма записи для меня не очевидна, нужно помнить, а не просто читать, каково его поведение.

Выход из циклов в С всегда по лжи - помнить нужно только это.
Базовые формы языка нужно знать, аднака. :)
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 можно только со значениями по умолчанию.
Простой пример:
void foo(int& a = 5) {
  a = 10;
}

int main() {
  foo();
}

Как компилятор должен это обработать?
Куда запишется 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
Счастья!
:drinks: :drinks: :drinks:
BRE,
13.8.2009, 21:07 Небольшие скрипты для выполнения в командной строке
import os, os.path as osp
for nam in os.listdirt('.'):
  os.rename(nam, '%s_123%s' % tuple(osp.splitext(nam)))


import os, os.path as osp
for nam in os.listdirt('.'):
  os.rename(nam, osp.splitext(nam)[0] + '.ss')
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 Языки программирования
Цитата(Litkevich Yuriy @ 23.7.2009, 13:14) *
Tonal, всё равно туго, это что-то вроде динамической типизации (определение типа переменной во время выполнения)?

Нет. Типизация остаётся статическая.
Компилятор во многих случаях сам в состоянии вывести тип на этапе компиляции.
В случае, если тип не однозначен получишь ошибку. :)

Вот список того, что вошло в gcc 4.4.0 из нового стандарта.
Лямбды не вошли. И концепты.
AD,

3 страниц V   1 2 3 >
RSS Текстовая версия Сейчас: 22.11.2024, 5:04