Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 25 26 27 28 29 30 31 [32] 33 34   вперед  Ctrl
 Re: FireDAC  [new]
Volk65
Member

Откуда:
Сообщений: 20
Если честно не знаю.
- Я гружу веб-страницу (через IDHTTP),
- потом сохраняю ее в файл (test.html),
- если открыть этот файл - то всё по русски,
- потом гружу этот файл в параметр и сохраняю в БД,
- в БД кривые символы.
29 май 17, 23:48    [20521668]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
rgreat
Member

Откуда:
Сообщений: 3530
Volk65
Если честно не знаю.
А вы узнайте.
30 май 17, 00:42    [20521711]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 888
1) Зачем вы используете TEXT когда VARCHAR(MAX) намного удобнее + рекомендация от microsoft.
2) Если пишете юникод, то надо NVARCHAR(MAX)
3) Файл в utf-16 или utf-8
30 май 17, 08:51    [20521869]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Volk65
Member

Откуда:
Сообщений: 20
Странно, если сохранить, например, эту страницу, то сохраняет нормально. А если яндекс или АлиЭкспресс, то сохраняется в неправильной кодировке...
30 май 17, 09:10    [20521913]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
bk0010
Member

Откуда:
Сообщений: 3401
Volk65
Странно, если сохранить, например, эту страницу, то сохраняет нормально. А если яндекс или АлиЭкспресс, то сохраняется в неправильной кодировке...
Чего странного? Нажмите правую кнопку мыши и выберите "Исходный код страницы". Там вы увидите HTML со строкой <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />, то есть однобайтовая кодировка. Если вы то же самое проделаете со страницей Яндекса, то увидите строчку <meta http-equiv=Content-Type content="text/html;charset=UTF-8">, то есть многобайтовая кодировка. Там русские буквы кодируются не одним байтом, а двумя. У вас при просмотре используется кодировка Win1251, вот отсюда и проблемы. При просмотре надо использовать ту кодировку, в которой сделаны страницы. Когда выполняете пункт "- если открыть этот файл - то всё по русски,", то браузер анализирует файл и выбирает нужную кодировку. А когда просматриваете БД, смотрелка работает с Win1251. Если вы считаете поле из БД и сохраните в файл, а потом откроете браузером, то опять увидите русские буквы.
30 май 17, 11:01    [20522454]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Volk65
Member

Откуда:
Сообщений: 20
Ага! Теперь вроде понятно. Спасибо.
Значит в базе он лежит без изменений. Это успокаивает :)
Вопрос отображения будем решать. Еще раз - спасибо.
30 май 17, 11:05    [20522470]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Volk65
Member

Откуда:
Сообщений: 20
И снова привет всем!

Ранее в ADO во многих местах использовались процедуры SQL сервера, которые возвращали несколько наборов данных (_Recordset)
FireDac, к счастью, тоже может принимать несколько наборов данных. Переход между ними NextRecordset. Тут всё понятно и всё работает.
Но вот незадача - как узнать какое количество наборов данных вернул запрос/пакет/процедура ?
17 июн 17, 20:55    [20572274]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
чччД
Guest
Volk65,
например, путем многократного вызова NextRecordset:
If there are no more
If there are no more accessible cursors after performing this call, the command is closed (State = csPrepared).

http://docwiki.embarcadero.com/Libraries/Tokyo/en/FireDAC.Comp.Client.TFDCustomCommand.NextRecordSet
17 июн 17, 23:23    [20572425]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Volk65
Member

Откуда:
Сообщений: 20
Путем многократного вызова вы получаете на очередном (вызове) - exception
Конечно можно заключить блок кода в try... except, но это тоже самое что перебирать все строки TStrings путем подстановки всех индексов от 0 до триллиона пока не возникнет "исключение".
Вопрос именно в том, что является признаком/флагом или числом окончания списка.
18 июн 17, 00:14    [20572476]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
чччД
Guest
Volk65,

английским языком написано. Черным по белому.
18 июн 17, 04:36    [20572554]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Volk65
Member

Откуда:
Сообщений: 20
Спасибо, работает. Смутило csPrepared, вкладывал в него другой смысл.
18 июн 17, 15:43    [20572974]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
st90
Member

Откуда:
Сообщений: 259
Подскажите, как зная имя грида узнать имя FDQuery, привязанного к нему?
19 июн 17, 10:41    [20573881]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
bk0010
Member

Откуда:
Сообщений: 3401
st90
Подскажите, как зная имя грида узнать имя FDQuery, привязанного к нему?
DBGrid.DataSource.DataSet.Name
19 июн 17, 12:50    [20574292]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Volk65
Member

Откуда:
Сообщений: 20
Всем привет!

Delphi 10.2

Есть сервер MySQL. На сервере процедура. Один из параметров процедуры определён как: IS_MAIN_FRAME BIT(1).
В RunTime создается TFDStoredProc, делается Prepare, заполняются параметры, и при выполнении выдает ошибку ....-338 (тип параметра был заменен с ftBytes на ftBoolean требуется "Reprepare"...)

Пытался:
1. Перед вызовом явно указывать DataType и FDDataType = ftBoolean и dtBoolean (соответственно) - не помогло
2. Перед вызовом делать Unprepare/Prepare - не помогло
3. Ремапинг (не уверен, что правильно задал параметры) тоже не помог:
  FConnect.FormatOptions.OwnMapRules:=True;
  with FConnect.FormatOptions.MapRules.Add do begin
    ScaleMin := 0;
    ScaleMax := 0;
    PrecMin := 1;
    PrecMax := 1;
    SourceDataType := dtByte;
    TargetDataType := dtBoolean;
  end;


на всякий случай сообщ. об ошибке приложил

К сообщению приложен файл. Размер - 6Kb
11 июл 17, 15:52    [20634078]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Близнец1980
Member

Откуда:
Сообщений: 55
Подскажите из-за чего может быть ошибка.

Пытаюсь разобраться с TFDEventAlerter в связке с PostgreSQL.
К PostgreSQL подключаюсь, данные вижу, все норм.
Но если попытаться сделать FDEventAlerter1.Active:=True то ошибка [firedac][phys][pg] -303 not supported.
В FDEventAlerter1 изменение каких-либо параметров (кроме Connection естественно) не влияет на результат, всегда эта ошибка.

Что может не хватать?
25 авг 17, 14:09    [20749353]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Близнец1980
Member

Откуда:
Сообщений: 55
Разобрался с ошибкой. Внимательней надо доку читать. Надо указать FDEventAlerter1.Options.Kind := 'Notifies' - это для постгреса, тогда ошибки нет.

Но и сообщения не приходят.

Код по кнопке:
  FDConPG.Connected:=True;
  FDQuery1.SQL.Text:='select * from test order by "ID"';
  if FDQuery1.Active then
     FDQuery1.Close;

  FDQuery1.Open();
  DataSource1.DataSet:=FDQuery1;

  FDEventAlerter1.Connection:=FDConPG;
  FDEventAlerter1.Names.Clear;
  FDEventAlerter1.Names.Add('TRG_TABLE');
  FDEventAlerter1.Options.Kind := 'Notifies';
  FDEventAlerter1.Options.Synchronize := True;
  FDEventAlerter1.Options.Timeout := 10000;
  FDEventAlerter1.OnAlert := FDEventAlerter1Alert;
  FDEventAlerter1.Register;
  FDEventAlerter1.Active := True;


Процедура для проверки:
procedure TForm1.FDEventAlerter1Alert(ASender: TFDCustomEventAlerter;
  const AEventName: string; const AArgument: Variant);
begin
     ShowMessage('AEventName = '+AEventName+', AArgument = '+string(AArgument));
end;

Триггерная функция в PostgreSQL:
CREATE FUNCTION public."CALL_NOTIFY"()
    RETURNS trigger
    LANGUAGE 'plpgsql'
    COST 100
    VOLATILE NOT LEAKPROOF 
    ROWS 0
AS $BODY$
BEGIN
   
    IF  TG_OP = 'INSERT' THEN
        NOTIFY TRG_TABLE, 'INSERT';
        INSERT INTO public."LOG" ("TEXT") VALUES ('CALL_NOTIFY INSERT');
        RETURN NEW;
    ELSIF TG_OP = 'UPDATE' THEN
        NOTIFY TRG_TABLE, 'UPDATE';
        INSERT INTO public."LOG" ("TEXT") VALUES ('CALL_NOTIFY UPDATE');
        RETURN NEW;
    ELSIF TG_OP = 'DELETE' THEN
        NOTIFY TRG_TABLE, 'DELETE';
	INSERT INTO public."LOG" ("TEXT") VALUES ('CALL_NOTIFY DELETE');
        RETURN OLD;
    END IF;
END;

$BODY$;

ALTER FUNCTION public."CALL_NOTIFY"()
    OWNER TO postgres;


Что не так? Почему сообщения не приходят?

P.S. В UniAlerter работает.
29 авг 17, 12:21    [20755799]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Cobalt747
Member

Откуда:
Сообщений: 1954
Подскажите, есть ли возможность указать базу не отдельно Database/Server, а одной строкой, как принято у Firebird "server:PathToFile.fdb"?
18 сен 17, 17:52    [20804275]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9501
Cobalt747
Подскажите, есть ли возможность указать базу не отдельно Database/Server, а одной строкой, как принято у Firebird "server:PathToFile.fdb"?

Если не указывать параметры Protocol и Server, то тогда будет подразумеваться, что Database содержит полную строку соединения в формате Firebird / InterBase.
19 сен 17, 09:23    [20804982]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Cobalt747
Member

Откуда:
Сообщений: 1954
Ааа, еще и протокол надо убрать!

Спасибо!
19 сен 17, 11:17    [20805346]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9501
Cobalt747
Ааа, еще и протокол надо убрать!

Ну либо Protocol, Server, Database указаны и FD будет из них конструировать строку соединения.
Либо только Database указан и значение есть полная строка соединения.
19 сен 17, 16:37    [20806636]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Arioch
Member

Откуда:
Сообщений: 9038
Довольно любопытный "теоретический" вопрос всплыл.

https://stackoverflow.com/questions/46302008/how-to-stream-an-image-that-zipped-with-zlib-from-firebird-database-by-firedac

Часть BLOB'ов выделено в отдельную БД и упакованы ZLib

Нужно их прозрачно распаковывать при чтении, централизовано, чтобы не в каждой форме по отдельности.

Понятно, что можно перекрыть TDataset.CreateBlobStream, или поставить установить на самом сервере data blades (правда тогда придется в таблицах менять подтип блобов и сетевой траффик вырастет), но интересно, нет ли в FD готового интерфейса для конвертеров блобов на клиенте.

Вроде есть целый раздел Data Adapters [DApt] - но на DocWiki про него ни слова
20 сен 17, 13:24    [20808772]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Michael Longneck
Member

Откуда: Москва
Сообщений: 2264
FireDac.DApt это про генерацию команд на изменение и загрузку данных. А собственно fetch в другом месте - FireDac.Phys.ODBCWrapper для MSSQL. И такое место, чтобы прозрачно вклинится в чтение и запись блобов и сжимать разжимать на лету в исходниках FireDac не так и просто найти.
20 сен 17, 22:44    [20810502]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Arioch
Member

Откуда:
Сообщений: 9038
Любопытно....

20817291

FireDAC на самом деле работает с Interbase/Firebird через другие компоненты (IBX) ?
25 сен 17, 13:47    [20820615]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Dmitry Arefiev
Member

Откуда:
Сообщений: 9501
Arioch
FireDAC на самом деле работает с Interbase/Firebird через другие компоненты (IBX) ?

Или IBX через FireDAC ... ?
25 сен 17, 14:12    [20820732]     Ответить | Цитировать Сообщить модератору
 Re: FireDAC  [new]
Arioch
Member

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

Посмотри по ссылке, не будем в испорченный телефон играть.
25 сен 17, 17:11    [20821393]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 25 26 27 28 29 30 31 [32] 33 34   вперед  Ctrl
Все форумы / Delphi Ответить