Найдено 217 результатов

Akella
Ср 04 июл 2012 07:18
Форум: Universal Data Access Components
Тема: Ошибка - отсутствует fmx163.bpl
Ответы: 4
Просмотры: 4749

Ошибка - отсутствует fmx163.bpl

Только что скачал и установил новую версию (4.2.7) UniDAC for DXE2. Т.к. деинсталляции не нашёл ни в меню Пуску, ни в апплете "Программы и компоненты", то установил новую версию просто поверх старой.

Появилась при запуске Delphi XE2 Upd4 вот такая ошибка:
Запуск программы невозможен, так как на компьютере отсутствует fmx163.bpl. Попробуйте переустановить программу.
Затем я удалил компоненты из Delphi через меню Install Packages и установил новую версию заново. Проблема не исчезла.

Это проблема связана с новой версией UniDAC? Как её решить?
Akella
Пн 25 июн 2012 14:58
Форум: Universal Data Access Components
Тема: Запрос на Update
Ответы: 2
Просмотры: 3111

Re: Запрос на Update

Спасибо. Действительно, дело было в CachedUpdates. Никогда не использовал CachedUpdates, поэтому даже не обращал внимание значение этого свойство. А включил его, наверное, чисто случайно.
Akella
Пн 25 июн 2012 08:49
Форум: Universal Data Access Components
Тема: Вложенность скобок в условиях при использовании AddWhere
Ответы: 1
Просмотры: 2396

Вложенность скобок в условиях при использовании AddWhere

Вот запрос

Код: Выделить всё

SELECT distinct 
     a.id
     , a.txt
     , a.rub_id
     , a.rub
     , a.vid
     , a.id_obj_site
     , a.id_user_ekr
     , a.Deleted
     , a.paid
     , a.id_team
     , a.gdn
	 , a.rub_code

FROM
  kvartal_prem.ads a
left JOIN datas d
ON (d.id_ads = a.id)
Затем я строю where кляузу:

Код: Выделить всё

  with fUniQuery do
  begin
    Close;
    DeleteWhere;
    KeyFields := 'id';

    //если выбрана какая-то бригада(ы)
    if team_list <> '' then
      AddWhere('a.id_team in (' + team_list + ')');

    //активные
    AddWhere('a.Deleted = 0');

    //отключаем ЖиДН (берем только в Премьер)
    AddWhere('a.gdn = 0');

    AddWhere('d.date_out = :dt_out');
    ParamByName('dt_out').AsDate := date_out;

    ShowMessage(SQL.Text);
  end;//with
получается вот такой запрос, где много лишних скобок + вложенность условий:

Код: Выделить всё

SELECT distinct 
     a.id
     , a.txt
     , a.rub_id
     , a.rub
     , a.vid
     , a.id_obj_site
     , a.id_user_ekr
     , a.Deleted
     , a.paid
     , a.id_team
     , a.gdn
	 , a.rub_code

FROM
  kvartal_prem.ads a
left JOIN datas d
ON (d.id_ads = a.id)
WHERE (((a.id_team in (12,11,5,9,328)) AND a.Deleted = 0) AND a.gdn = 0) AND d.date_out = :dt_out 


разве не вот такой запрос должен получиться?

Код: Выделить всё

WHERE a.id_team in (827,21,17,15) AND a.Deleted = 0 AND a.gdn = 0 AND d.date_out = :dt_out 
или

Код: Выделить всё

WHERE (a.id_team in (827,21,17,15)) AND (a.Deleted = 0) AND (a.gdn = 0) (AND d.date_out = :dt_out )
UniDAC 4.1.6 for Delphi XE2
Akella
Пн 25 июн 2012 07:33
Форум: Universal Data Access Components
Тема: Запрос на Update
Ответы: 2
Просмотры: 3111

Запрос на Update

Может быть я не совсем понимаю чего-то. Поправьте меня.
Проблема с обновлением.
При обновлении ошибок нет, но и значения полей не меняются. Т.е. после переоткрытия таблицы вижу старые значения.

Запрос на Select (из двух разных баз данных - гетерогенный):
Основная база kvartal_ekr и kvartal_prem это вторая база, из которой берутся данные для расчетов.

Код: Выделить всё

SELECT u.id
     , u.fio
     , u.login
     , u.id_brigadir
     , u.plus_sum_premier
     , u.prepayment_premier
     , sum(if(dayofweek(d.date_out) = 2, if(a.paid = 0, v.price_d, 0), if(a.paid = 0, v.price, 0))) AS sum_free
     , sum(if(dayofweek(d.date_out) = 2, if(a.paid = 1, v.price_d, 0), if(a.paid = 1, v.price, 0))) AS sum_paid
     , count(o.id) AS ex_count
     , (
       CASE count(o.id)
       WHEN 0 THEN
         20.4
       WHEN 1 THEN
         25.5
       WHEN 2 THEN
         30.6
       ELSE
         35.7
       END) AS sum_default

FROM
  kvartal_ekr.users u

LEFT JOIN kvartal_prem.ads a
ON (u.id = a.id_user_ekr)

LEFT JOIN kvartal_prem.datas d
ON (d.id_ads = a.id)

LEFT JOIN kvartal_prem.vid v
ON (v.id = a.vid AND v.deleted = 0 /*&dt_start &dt_end*/)

LEFT JOIN kvartal_ekr.object_n o
ON (o.id_infosource_exclusive = u.id AND o.is_deleted = 0)


WHERE
  u.is_deleted = 0
  AND u.is_blocked = 0
GROUP BY
  1

запрос на Insert и Delete (чтобы компонента не генерировала сама запрос):
Затем с помощью SQL generator сгенерировал и отредактировал запрос на Update:

Код: Выделить всё

UPDATE users /* пробовал и так: kvartal_ekr.users*/
SET
  plus_sum_premier = :plus_sum_premier, prepayment_premier = :prepayment_premier
WHERE
  id = :Old_id

У TUniQuery установлены свойства:
KeyFields := 'id';
UpdateTable := 'users';

UniDAC 4.1.6 for Delphi XE2
Akella
Пт 22 июн 2012 14:53
Форум: dbForge for MySQL
Тема: Нет фокуса ввода в редакторе кода после Alt+TAB
Ответы: 3
Просмотры: 3597

Re: Нет фокуса ввода в редакторе кода после Alt+TAB

Да, наверное эта ошибка проявилась только 1 раз. Сейчас её уже нет.
Akella
Чт 21 июн 2012 09:54
Форум: Universal Data Access Components
Тема: Автогенерация запросов на удаление
Ответы: 7
Просмотры: 6478

Re: Автогенерация запросов на удаление

Так в том-то и дело, что программисту не нужны вообще запросы кроме Select и Refresh. Зачем ещё думать и помнить, что нужно не забыть про остальные свойства: SQLInsert, SQLUpdate, SQLDelete и чем-нибудь из заполнить?
Akella
Чт 21 июн 2012 09:35
Форум: Universal Data Access Components
Тема: Управление условиями
Ответы: 9
Просмотры: 6725

Re: Управление условиями

Так не интересно.
Akella
Ср 20 июн 2012 12:10
Форум: Universal Data Access Components
Тема: Автогенерация запросов на удаление
Ответы: 7
Просмотры: 6478

Re: Автогенерация запросов на удаление

Не вижу, а где здесь написано, что датасет автоматически, без участия программиста генерирует или создает SQL запросы на уделение, добавление и т.д.?
Data access and data management automation

Automatic data updating with TUniQuery, TUniTable, and TUniStoredProc components
Automatic record refreshing and locking
Automatic query preparing
Support for ftWideMemo field type in Delphi 2006 and higher
Ещё вопрос. Как мне заставить TUniQuery программно сгенерировать запрос?
Например, сгенерировать запрос только для refresh, а для остальных не генерировать.

Как запретить автоматически генерировать те или иные запросы?
Akella
Ср 20 июн 2012 12:03
Форум: Universal Data Access Components
Тема: Управление условиями
Ответы: 9
Просмотры: 6725

Re: Управление условиями

Как я могу проголосовать за ту или иную функциональность, если у меня больше нет "голосов"?
Akella
Ср 20 июн 2012 09:21
Форум: Universal Data Access Components
Тема: Управление условиями
Ответы: 9
Просмотры: 6725

Re: Управление условиями

Я про то, что UserVoice ограничивает меня и других. Зачем нам такое "счастье"?
Akella
Ср 20 июн 2012 08:28
Форум: Universal Data Access Components
Тема: Автогенерация запросов на удаление
Ответы: 7
Просмотры: 6478

Re: Автогенерация запросов на удаление

Это очень плохо и причин тому несколько.


1. Почему я должен быть уверен, что компонента на 100% правильно и корректно автоматически сгенерирует тот или иной запрос?
2. Получается, что компонента "в тайне" от программиста чего-то там генерит с ПОСЛЕДСТВИЯМИ!! :shock:
3. В конце концов, может получиться непредвиденное, как получилось у меня. Select-запрос был на составление некой статистики относительно списка пользователей. Пользователь, работающий с программой, думает, что это обычная статистика, хотя построена она относительно таблицы пользователей. При этом, пользователь захотел "почистить" статистику, грохнув благополучно навсегда часть пользователей, т.к. грид дал команду "удалить", а датасет и не сопротивлялся.

4. В свойствах датасета НЕТ чего-то, чем можно ограничить то или иное действие (удаление, добавление, изменение)в независимости от того, есть ли для этого действия SQL-запрос или нет. К датасету может быть подключено несколько гридов на разных формах, к примеру, и легде ограничить это централизованно в датасете, чем в каждом гриде.

Поэтому нужен какой-то механизм, функционал, который бы разрешал/запрещал датасету автоматически генерировать запросы.
Akella
Ср 20 июн 2012 08:01
Форум: Universal Data Access Components
Тема: Управление условиями
Ответы: 9
Просмотры: 6725

Re: Управление условиями

Зачем вам этот UserVoice?
Форум же есть :)
Akella
Ср 20 июн 2012 08:00
Форум: Universal Data Access Components
Тема: Управление условиями
Ответы: 9
Просмотры: 6725

Re: Управление условиями

Добавил бы, но не могу уже:(
Akella
Вт 19 июн 2012 13:15
Форум: Universal Data Access Components
Тема: Управление условиями
Ответы: 9
Просмотры: 6725

Управление условиями

Очень было бы здорово, если бы в компонентах UniDAC и в остальных тоже, был бы реализован гибкий функционал для управления SQL запросами в части WHERE.
Чтобы не просто DeleteWhere и потом заново всё полностью формировать.
Обратите внимание, как сделали коллеги из DevRace в компонентах FibPlus с функционалом TConditions. Весьма удобно.

Есть запрос SQL:

Код: Выделить всё

select id, name from table1 where date1 > :date1 and date1 < :date2
Если выполнить DeleteWhere, то запрос в части where исчезнет. А такого быть не должно. Компонента не должна "трогать" первоначальный мой запрос, а должна добавлять/менять/удалять только то, что программно было добавлено.
Можно добавить "именованные условия".
Например:

Код: Выделить всё

UniQuery1.ClearWhere;
UniQuery1.AddWhere('условие1', 'id > 100');
UniQuery1.AddWhere('условие2', 'id < 500');
UniQuery1.DeleteWhere('условие2');
или по индексу
UniQuery1.DeleteWhere(1);
UniQuery1.AddWhere('условие2', 'id < 500');
UniQuery1.ApplyWhere; и UniQuery1.CancelWhere;
UniQuery1.Open;


UniQuery1.RestorePrimarySQL;

Var
MyWhere : TUniWhere;

MyWhere := UniQuery1.FindWhere('условие');
if not assigned(MyWhere) then ShowMessage('Условие не найдено');
Иногда запросом управляют из разных мест приложения. И постоянно его заново строить не имеет смысла. Можно ведь включать/выключать нужные условия.
Akella
Вт 19 июн 2012 12:58
Форум: Universal Data Access Components
Тема: Автогенерация запросов на удаление
Ответы: 7
Просмотры: 6478

Автогенерация запросов на удаление

Скажите, а что, TUniQuery автоматически генерирует без участия программиста запросы на удаление?