Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 31 32 33 34 35 36 [37] 38 39 40   вперед  Ctrl
 Re: FireDAC  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9585
Исключи fiMeta из FetchOptions.Items, заполни Params как тебе нужно, и потом ExecProc.
30 май 18, 20:43    [21455516]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Valery_B
Member

Откуда: Москва
Сообщений: 1728
Dmitry Arefiev,

А мне показалось, что именно так я и сделал.
Попробовал через ExecProc - разницы нет.

 FDStoredProc1.StoredProcName:='sppl_MainMeaningOfLife';
 FDStoredProc1.Params.Clear;
 FDStoredProc1.Command.FetchOptions.Items:=[fiBlobs, fiDetails]; //что бы он не создавал параметры с NULL
 FDStoredProc1.Command.Params.CreateParam(ftString,'Name',ptInput).AsString:='Valeriy';
 FDStoredProc1.Open;
30 май 18, 21:38    [21455637]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
vavan
Member

Откуда: Казань
Сообщений: 3106
Valery_B
у тебя получилось ?
И что ты сделал ?
21454733
Valery_B
У меня и так наследник от FDMemTable
это тут вообще не в тему. в данном аспекте у меня от TADStoredProc
31 май 18, 09:01    [21456184]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Stalker4
Member

Откуда:
Сообщений: 236
Dmitry Arefiev,

Посмотрите пожалуйста мои вопросы в сообщениях 21431071 и 21419989.
Очень бы хотелось услышать Ваши ответы на них.
21 июн 18, 15:34    [21510037]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9585
Stalker4
{ver 1.0 b10}.

Это давно исправлено.
Stalker4
ODBCAdvanced=start=dbeng12.exe

Все правильно. Надо указывать полный путь или он должен быть в PATH. VendorHome тут не при чем.
Stalker4
Может стоит такой добавить ?

Можно улучшить CopyDataSet ...
Stalker4
Это проход по внутренностям FDQuery1 с учетом возможного фильтра или без него ?

SourceView.Rows - с учетом фильтра и сортировки
Table.Rows - без учета
22 июн 18, 14:14    [21513141]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Вопрос Дмитрию
Guest
С UniTable работает безупречно:
for i := 0 to s.Count - 1 do
 begin
  ASection := TableList.Sections.Add;
  ASection.Header := s.Strings[i];
  UniTable.SQL.Text := 'SELECT * FROM country WHERE city LIKE ''' + ASection.Header + '%'' ORDER BY city';
  UniTable.ExecSQL;
 end;
Возвращается нужный и что самое главное ожидаемый результат.



Но с FDTable выдаёт ошибку:
for i := 0 to s.Count - 1 do
 begin
  ASection := TableList.Sections.Add;
  ASection.Header := s.Strings[i];
  FDTable.SQL.Text := 'SELECT * FROM country WHERE city LIKE ''' + ASection.Header + '%'' ORDER BY city';
  FDTable.ExecSQL;
 end;




Почему и как это исправить? Вроде пара строк всего, а геморроя немерено :(



Такое не предлагать:
FDTable.ExecSQL('SELECT * FROM country WHERE city LIKE ''' + ASection.Header + '%'' ORDER BY city');
Приложение безмолвно вылетает без всяких сообщений об ошибках.


Такое тоже не предлагать:
FDTable.Open('SELECT * FROM country WHERE city LIKE ''' + ASection.Header + '%'' ORDER BY city');
В ответе возвращается мусор, причём почему-то в дублированном виде.



В UniDAC всё работает из коробки, максимум что требуется - включить прямой доступ и настроить авторизацию.
Продукцией FireDAC пользуюсь впервые. Догадываюсь, что что-то где-то нужно включать/отключать - но что именно? SQL-запрос вроде и так уже проще и банальнее некуда.

К сообщению приложен файл. Размер - 5Kb
22 июн 18, 22:28    [21514479]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
bk0010
Member

Откуда:
Сообщений: 4585
ExecSQL для DML, вам нужен Open;
Не используйте * без крайней необходимости, перечисляйте поля.
Используйте параметры, а не прямую подстановку.
Мусор - разбирайтесь с кодировками на сервере, клиенте, ODBC (если используете) и настройках AnyDAC.
Дублируется - ищите проблемы в БД, не обойдете используйте distinct:
SELECT distinct * FROM country WHERE city LIKE ''' + ASection.Header + '%'' ORDER BY city.
Отключите макросы (на всякий случай): при прямой подстановке могут быть сюрпризы.
22 июн 18, 22:47    [21514498]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
JaDi
Member

Откуда: Сызрань, Россия
Сообщений: 3663
Вопрос Дмитрию,

у FireDAC, если не ошибаюсь, по умолчанию включен скриптовый движок по замене спец команд и символов в запросах. Подробнее. Можно в эту сторону посмотреть и протестировать более простые запросы (и вообще, где логика -- писать SQL для таблицы TFDTable, когда есть специальный датасет под кастомные запросы -- TFDQuery.
22 июн 18, 22:55    [21514521]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Вопрос Дмитрию
Guest
bk0010
ExecSQL для DML, вам нужен Open;
Не используйте * без крайней необходимости, перечисляйте поля.
Используйте параметры, а не прямую подстановку.
Мусор - разбирайтесь с кодировками на сервере, клиенте, ODBC (если используете) и настройках AnyDAC.
Дублируется - ищите проблемы в БД, не обойдете используйте distinct:
SELECT distinct * FROM country WHERE city LIKE ''' + ASection.Header + '%'' ORDER BY city.
Отключите макросы (на всякий случай): при прямой подстановке могут быть сюрпризы.

Пожалуй мне проще тогда будет отказаться от FireDAC, пока с головой не погряз в запросах, а то слишком много телодвижений получается при прочих равных условиях. Пример, конечно, был абсолютно рабочий, но исключительно для теста - чтобы наглядно продемонстрировать проблему с которой я столкнулся и не смог решить своими силами. Но спасибо за советы и подсказки!
22 июн 18, 23:12    [21514548]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59005
Вопрос Дмитрию
Но с FDTable выдаёт ошибку:


Почему и как это исправить? Вроде пара строк всего, а геморроя немерено :(
Вы несёте какой-то бред, при чём из-за собственной неграмотности.
В сообщении об ошибке ясно сказано - используйте Open.

Вопрос Дмитрию
В ответе возвращается мусор, причём почему-то в дублированном виде.
Ну так и выясняйте (и спрашивайте, если не можете выяснить сами), почему
мусор и почему продублированный (кстати, что значит продублированный?).

Вопрос Дмитрию
Такое не предлагать:
FDTable.ExecSQL('SELECT * FROM country WHERE city LIKE ''' + ASection.Header + '%'' ORDER BY city');
Приложение безмолвно вылетает без всяких сообщений об ошибках.
Во-первых, в чём отличие от первого варианта? Во-вторых, что значит "вылетает"?
Запущенное в дебаг-режиме приложение само завершается без ошибок?
23 июн 18, 00:35    [21514714]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Вопрос Дмитрию
Guest
За Диму горой стоите - молодцы. Только никто его бить не будет, так что расступитесь

Давайте объясню ещё раз, более наглядно :)

for i := 0 to s.Count - 1 do
 begin
  ASection := TableList.Sections.Add;
  ASection.Header := s.Strings[i];
  UniTable.SQL.Text := 'SELECT * FROM country WHERE city LIKE ''' + ASection.Header + '%'' ORDER BY city';
  UniTable.ExecSQL;
 end;

Указанный выше код возвращает такой результат:

A
 Alaska
 Allentown
 Atlanta

B
 Baltimore
 Bedford
 Boston

C
 Canton
 Columbus

Обратите внимание: всё отсортировано, записи не повторяются.



for i := 0 to s.Count - 1 do
 begin
  ASection := TableList.Sections.Add;
  ASection.Header := s.Strings[i];
  FDTable.SQL.Text := 'SELECT * FROM country WHERE city LIKE ''' + ASection.Header + '%'' ORDER BY city';
  FDTable.ExecSQL;
 end;

Указанный выше код возвращает такой результат:

A
 Columbus
 Alaska
 Boston
 Bedford
 Allentown
 Baltimore
 Atlanta
 Canton
 
B
 Columbus
 Alaska
 Boston
 Bedford
 Allentown
 Baltimore
 Atlanta
 Canton

C
 Columbus
 Alaska
 Boston
 Bedford
 Allentown
 Baltimore
 Atlanta
 Canton

Вот именно в таком же хаотичном порядке и почему-то ВСЕ записи продублированы для каждого алфавитного сектора (A, B, C). Это в моём понимании и есть "мусор" (нет никаких проблем с кодировкой и уж тем более с БД), хотя KeyField (поле integer PRIMARY KEY NOT NULL) прописан. Просто стало интересно, почему код в таком виде прекрасно работает в UniDAC, но не работает в FireDAC?
23 июн 18, 07:10    [21514825]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Вопрос Дмитрию
Guest
FireDAC даёт так:

К сообщению приложен файл. Размер - 79Kb
23 июн 18, 07:36    [21514831]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Вопрос Дмитрию
Guest
UniDAC даёт так:

К сообщению приложен файл. Размер - 75Kb
23 июн 18, 07:38    [21514833]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Вопрос Дмитрию
Guest
Изменения в коде для подключения:

...
FDConnection.Params.Database := TPath.Combine(TPath.GetDocumentsPath, 'test.db');
FDConnection.Connected := true;
...


и

...
UniConnection.Database := TPath.Combine(TPath.GetDocumentsPath, 'test.db');
UniConnection.Connect;
...



Всё остальное окружение разумеется одно и то же (СУБД, БД) :)
23 июн 18, 07:41    [21514835]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Вопрос Дмитрию
Guest
Скрины большие - извините, решил набросать на скорую руку, чтобы вы вместо голого текста лучше на реальном приложении посмотрели и поняли, что я имел ввиду :)
23 июн 18, 07:44    [21514836]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Вопрос Дмитрию
Guest
JaDi
Вопрос Дмитрию,

у FireDAC, если не ошибаюсь, по умолчанию включен скриптовый движок по замене спец команд и символов в запросах. Подробнее. Можно в эту сторону посмотреть и протестировать более простые запросы (и вообще, где логика -- писать SQL для таблицы TFDTable, когда есть специальный датасет под кастомные запросы -- TFDQuery.


Да, спасибо за наводку, почитал. Теперь пытаюсь разобраться с макросами (возможно в них вся проблема).

Сейчас ещё заметил, что не все опции в ИО взаимосвязаны: почему-то DirectExecute не реагирует на изменение rvDirectExecute и наоборот, хотя все остальные опции реагируют. Или это норма?

К сообщению приложен файл. Размер - 143Kb
23 июн 18, 11:10    [21514962]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59005
Вопрос Дмитрию> FDTable.SQL.Text := 'SELECT * FROM country
Вопрос Дмитрию> Указанный выше код возвращает такой результат:
Вопрос Дмитрию> A
Вопрос Дмитрию> Columbus

Врёт и не краснеет.

Ну что по какой-то причине не работает Like - теоретически, я ещё
могу поверить, , но что в таблице country есть запись A - не могу.

Posted via ActualForum NNTP Server 1.5

23 июн 18, 12:16    [21515035]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Вопрос Дмитрию
Guest
Гаджимурадов Рустам
Вопрос Дмитрию> FDTable.SQL.Text := 'SELECT * FROM country
Вопрос Дмитрию> Указанный выше код возвращает такой результат:
Вопрос Дмитрию> A
Вопрос Дмитрию> Columbus

Врёт и не краснеет.

Ну что по какой-то причине не работает Like - теоретически, я ещё
могу поверить, , но что в таблице country есть запись A - не могу.

Ну если даже модератор опустился до оскорблений и обвинений - тогда да, наверное, смысла продолжать спрашивать больше нет. Приношу всем свои искренние извинения. Удалите мои сообщения, пусть Дима даже живёт в своём иллюзорном мире где в его детище нет багов.


p.s.
Если что, список со странами специально был дан в виде текста - чисто для наглядного примера, чтобы проще было читать.
А вот скрины реального тестового приложения с компонентами FireDAC - выше. Там отчётливо видно, что в сектор "А" почему-то попадают записи, начинающиеся с других букв, причём даже ORDER BY игнорируется, судя по порядку этих записей.
23 июн 18, 14:37    [21515264]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59005
Вопрос Дмитрию> Ну если даже

Бла-бла-бла. Баги есть везде, но нужно правильно определять их источник и причину.

> А вот скрины ... Там отчётливо видно, что в сектор "А"
> почему-то попадают записи, начинающиеся с других
> букв, причём даже ORDER BY игнорируется

Во-первых, у FireDAC-а нет и не может быть никаких "скринов",
тем более таких, этим Вы только подтверждаете неграмотность.
А во-вторых, начать следовало бы с проверки текста запроса,
который уходит на сервер - в отладчике или в профайлере.
И если он корректный - потом уже выяснять, что является
причиной некорректных результатов и сортировки - макросы,
настройки и т.д.

Posted via ActualForum NNTP Server 1.5

23 июн 18, 14:59    [21515298]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
чччД__
Guest
Вопрос Дмитрию
bk0010
ExecSQL для DML, вам нужен Open;
Не используйте * без крайней необходимости, перечисляйте поля.
Используйте параметры, а не прямую подстановку.
Мусор - разбирайтесь с кодировками на сервере, клиенте, ODBC (если используете) и настройках AnyDAC.
Дублируется - ищите проблемы в БД, не обойдете используйте distinct:
SELECT distinct * FROM country WHERE city LIKE ''' + ASection.Header + '%'' ORDER BY city.
Отключите макросы (на всякий случай): при прямой подстановке могут быть сюрпризы.

Пожалуй мне проще тогда будет отказаться от FireDAC, пока с головой не погряз в запросах, а то слишком много телодвижений получается при прочих равных условиях. Пример, конечно, был абсолютно рабочий, но исключительно для теста - чтобы наглядно продемонстрировать проблему с которой я столкнулся и не смог решить своими силами. Но спасибо за советы и подсказки!

п....ц бл*.
Нормально ведь ответили, в каком направлении рыть, а ты на весь свет обижаешься.

Если что - эти даки я не использовал и не планирую.
23 июн 18, 15:29    [21515317]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Вопрос Дмитрию
Guest
Гаджимурадов Рустам
Бла-бла-бла. Баги есть везде, но нужно правильно определять их источник и причину.
Предлагаю снизить градус напряжения и дождаться непосредственно Дмитрия. Всё, что я мог - я уже сказал и показал выше. Даже две говорящие за себя картинки есть. И один мультик :)



Гаджимурадов Рустам
Во-первых, у FireDAC-а нет и не может быть никаких "скринов", тем более таких, этим Вы только подтверждаете неграмотность.
То, что я здесь задаю свои глупые вопросы, и то, что я сказал "Продукцией FireDAC пользуюсь впервые" - это ли не очевидный признак моей неграмотности? Зачем в КАЖДОМ своём сообщении указывать на чью-то неграмотность? Или это какой-то хитрый психологический ход, рассчитанный на волшебный рост грамотности? Или сюда вход только грамотным? :)



Гаджимурадов Рустам
А во-вторых, начать следовало бы с проверки текста запроса, который уходит на сервер - в отладчике или в профайлере.
Так нет же никакого сервера - есть db-файл, который линкуется к приложению и автономно используется им на мобильном устройстве. Но самое главное: один и тот же SQL-запрос к одному и тому же SQLite-файлу даёт разные результаты в разных даках (при всех прочих равных условиях). От того я и здесь: узнать, почему так получается, что использование ExecSQL у одного дака даёт именно тот результат, который нужен и который ожидается, а использование ExecSQL у другого дака - считается первым грехом и преступлением.



Гаджимурадов Рустам
И если он корректный - потом уже выяснять, что является причиной некорректных результатов и сортировки - макросы, настройки и т.д.
Ну, а я что пытаюсь выяснить с самого первого моего сообщения: "Догадываюсь, что что-то где-то нужно включать/отключать - но что именно?"? :)



чччД__
п....ц бл*.
Нормально ведь ответили, в каком направлении рыть, а ты на весь свет обижаешься.
Смешно упрёки про какие-то обидки слышать от того, кто тут обычно первым дверью хлопает и убегает в слезах (да-да, я до сих пор помню, как ты тут истерил и на стенку лез в 2015-м от собственного бессилия - такое шоу не забывается)
Ты бы лучше Диму сюда призвал. А то судя по твоему настроению и матам, сейчас опять нарвёшься, опять получишь, опять потом плакать будешь ;)
23 июн 18, 17:27    [21515409]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59005
Вопрос Дмитрию> Предлагаю снизить градус напряжения и дождаться непосредственно Дмитрия.

Никакого напряжения, тем более градусного, нет.
Но когда наблюдаешь сопли в стиле "ой как сложно,
ой у вас простой пример не работает, уйду я от вас,
живите дальше в своём иллюзорном мире", то да,
становится смешно. А Дима, скорее всего, первым
спросит воспроизводимый пример.

Posted via ActualForum NNTP Server 1.5

23 июн 18, 17:37    [21515418]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 1884
Это ты, Рустам, видимо в поддержке никогда не работал. Иначе бы знал, что подобные вопросы, одни из самых популярных и определяющих на переход/отношение к тому или иному вендору. У любого программиста нарабатываются определенные подходы и шаблоны в программировании. И когда они не срабатывают на других библиотеках и компонентах становится "мучительно больно". У нас дохренищи подобных вопросов от впервые использующих наши компоненты и от давно не обновлявшихся.
PS: Плюс всегда остаётся возможность нарваться на реальный баг
23 июн 18, 23:55    [21516018]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Гаджимурадов Рустам
Member

Откуда:
Сообщений: 59005
white_nigger> подобные вопросы, одни из самых популярных и определяющих
white_nigger> на переход/отношение к тому или иному вендору.

Есть разница между "определением отношения к"
и "поиском источника проблемы и её решения".
Первое лично мне малоинтересно, это к Диме.
А со вторым в данном случае явная проблема -
в отличие от, например, соседнего топика буржуя.

Posted via ActualForum NNTP Server 1.5

24 июн 18, 00:41    [21516082]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 1884
Просто мне непонятно, почему так агрессивно на чувака накинулись. Вроде он нормально спросил, примеры привёл и поблагодарил за помощь. По сравнению с многими другими здесь вопрошающими весьма адекватно всё было. А тут сразу "несёте бред, из-за собственной неграмотности." День неудачный был, или любимая команда проиграла? :) А вообще это уже оффтоп
24 июн 18, 01:36    [21516101]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 31 32 33 34 35 36 [37] 38 39 40   вперед  Ctrl
Все форумы / Delphi Ответить