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

ViktorV
Ср 13 мар 2019 14:53
Форум: Universal Data Access Components
Тема: UniDAC + MySQL + SSL
Ответы: 3
Просмотры: 8617

Re: UniDAC + MySQL + SSL

UniDAC использует следующие имена библиотек OpenSSL: libeay32.dll и ssleay32.dll. Вы можете деплоить данные библиотеки со своим приложением, чтобы не зависеть от наличия данных библиотек на компьютере. Но использование библиотек OpenSSL для создания соединений SSL с MySQL сервером может привести к возникновению различных проблем. Например, версия OpenSSL может не поддерживаться сервером MySQL, битность поставляемых OpenSSL библиотек может отличаться от битности вашего приложения и т.д.
Для решения проблем вы можете использовать компоненты SecureBridge. SecureBridge позволяет устанавливать безопасные соединения в одном приложении без каких-либо внешних файлов. Вы можете узнать, как использовать SecureBridge с UniDAC в разделе «Secure connections» справки MyDAC.
Вы можете увидеть пример работы UniDAC и SecureBridge в демонстрационных проектах: %UniDACDemos%\TechnologySpecific\SecureBridge, где %UniDACDemos% - это путь установки демонстрационных проектов UniDAC на вашем компьютере.
ViktorV
Ср 13 мар 2019 14:24
Форум: Universal Data Access Components
Тема: Unidac Uniquery шифрование
Ответы: 5
Просмотры: 8889

Re: Unidac Uniquery шифрование

h9ko писал(а): Ср 06 мар 2019 21:51 И еще странное поведение использую пример из справки https://www.devart.com/unidac/docs/encryption.htm
при UniEncryptor->DataHeader=ehTag; или UniEncryptor->DataHeader=ehTagAndHash;
при вводе/выводе данных через подключенный UniTable данные шифруются/дешифруются
как пример настройки :
UniEncryptor->DataHeader=ehTagAndHash;
UniEncryptor->EncryptionAlgorithm=ehBlowfish;
UniEncryptor->HashAlgorithm=haSHA1;
UniEncryptor->InvalidHashAction=ihFail;
UniEncryptor->Password= 12345;
UniTable->Encryption->Fields= "ENAME, HIREDATE, SAL, FOTO";
в Unitable ввожу в поле "ENAME" Hello world в бд отображается:

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

C544E5292C9C42A5B94FE279127029012B0D67570773EDDD92CBDF2B5F4D4AE98356CB8B9D1DFF96BBF0B9924A57C30458C978399BA81A1BB6DE0B08E16C2580A5F660C91B618A341A7E503CD014247C
Если средствами бд внесу изменение в последнем символе например на

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

C544E5292C9C42A5B94FE279127029012B0D67570773EDDD92CBDF2B5F4D4AE98356CB8B9D1DFF96BBF0B9924A57C30458C978399BA81A1BB6DE0B08E16C2580A5F660C91B618A341A7E503CD014247F
При обновление UniTable выдастся ошибка "Encrypted data is corrupt - Invalid hash"
Если средствами бд внесу

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

Hello world
При обновление UniTable он не выдаст никаких ошибок и выдаст Hello world.
в чем подвох? Пробовал разные варианты UniEncryptor->InvalidHashAction, всегда аналогичное поведение
При использовании UniEncryptor->DataHeader=ehNone; хотя бы искажаются данные, но ошибок никаких
Для хранения зашифрованной информации мы сохраняем, кроме самих данных, дополнительную информацию: the GUID and the hash, когда DataHeader установлено в ehTagAndHash или ehTag. В данном случае, мы пытаемся вычитать GUID, а затем hash, так как вы изменили последний символ, hash измениться и вы получите указанную вами ошибку. В случае записи "Hello world" напрямую, мы пытаемся вычитать GUID и, если это не получиться выводим содержимое поля без попытки дешифрования.
ViktorV
Ср 13 мар 2019 14:21
Форум: Universal Data Access Components
Тема: Unidac Uniquery шифрование
Ответы: 5
Просмотры: 8889

Re: Unidac Uniquery шифрование

h9ko писал(а): Ср 06 мар 2019 11:41 Доброе время суток,
Указал в UniEncriptor поле шифрования DateMoment и пароль занес данные через Unitable c привязанным UniEncriptor.
Данные в базе зашифрованы в DBGrid все в расшифрованном виде все хорошо.
При использовании UniQuery1+DBGrid запрос ниже возвращает данные в зашифрованном виде

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

 UnicodeString sz = "SELECT * FROM OPER ";

	  UniQuery1->SQL->Clear();
	  UniQuery1->SQL->Add(sz);
	  UniQuery1->DataTypeMap->AddFieldNameRule ("DateMoment", ftString);
	  UniQuery1->Open();
При использовании UniQuery1+DBGrid запрос ниже не возвращает данные

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

 UnicodeString sz = "SELECT * FROM OPER WHERE DateMoment = '2021-03-05 00:00:00'";

	  UniQuery1->SQL->Clear();
	  UniQuery1->SQL->Add(sz);
	  UniQuery1->DataTypeMap->AddFieldNameRule ("DateMoment", ftString);
	  UniQuery1->Open();
Как делать запрос в Uniqery к зашифрованным столбцам чтобы можно было потом через методы ниже их изменять?

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

 if (!UniQuery1->IsEmpty())
	 {
	  UniQuery1->Edit();
	  UniQuery1->FieldByName("DateMoment")->AsString =  "2020-03-05 00:00:00";
	   UniQuery1->Post();
	 }else
	 {
	   UniQuery1->Insert();
	   UniQuery1->FieldByName("DateMoment")->AsString =  "2021-03-05 00:00:00";
	   UniQuery1->Post();
	  }  
При использовании запроса SELECT * FROM OPER WHERE DateMoment = '2021-03-05 00:00:00' UniDAC отправляет SELECT запрос как есть, без преобразования, а на сервере данные находятся в зашифрованном виде. Поэтому, вы получаете пустой рекордсет при выполнении указанного запроса. При использовании UniDAC Data Encryption вам следует использовать SELECT запрос без использования WHERE, тогда вы сможете использовать методы Edit .. Post для изменения данных.
ViktorV
Вт 12 фев 2019 09:59
Форум: MySQL Data Access Components
Тема: AV failure in the Refresh method in RAD Studio 10.2
Ответы: 4
Просмотры: 16126

Re: AV failure in the Refresh method in RAD Studio 10.2

Мы исправили указанную ошибку. Данное исправление войдет в следующий релиз MyDAC.
ViktorV
Чт 24 янв 2019 13:00
Форум: MySQL Data Access Components
Тема: AV failure in the Refresh method in RAD Studio 10.2
Ответы: 4
Просмотры: 16126

Re: AV failure in the Refresh method in RAD Studio 10.2

Спасибо за информацию. Мы исследуем данное поведение MyDAC и сообщим Вам результат.
ViktorV
Ср 23 янв 2019 11:32
Форум: MySQL Data Access Components
Тема: AV failure in the Refresh method in RAD Studio 10.2
Ответы: 4
Просмотры: 16126

Re: AV failure in the Refresh method in RAD Studio 10.2

Чтобы дать вам быстрый и полный ответ на ваш вопрос, пожалуйста, составьте и вышлите нам, с помощью контактной формы https://www.devart.com/company/contactform.html, полный пример, демонстрирующий указанное вами поведение, включающий скрипты для создания и заполнения объектов БД. Также укажите точную версию MySQl которую вы используете.
ViktorV
Ср 19 дек 2018 12:59
Форум: MySQL Data Access Components
Тема: Проблема с восстановлением соединения с сервером после простоя
Ответы: 1
Просмотры: 14394

Re: Проблема с восстановлением соединения с сервером после простоя

Обратите внимание, MyDAC автоматически не инициирует проверку соединения с сервером. Поэтому, после успешного соединения с сервером, если связь с сервером разрыватся свойство TMyConnection.Connected будет установленно в True и не возбуждаться событие OnConnectionLost пока не произойдет попытка обращения к серверу.
Для решения вашей задачи, вы можете использовать метод TMyConnection.Ping. Этот метод используется для проверки соединения с сервером MySQL, если соединение было разорвано, то возникнет ошибка и будет выполнена попытка переподключиться к серверу.
Также данный метод можно использовать для того, чтобы сервер не закрыл соединение по таймауту. В данном случае Вы можете использовать TMyConnection.Ping следующим образом - вызывать его из таймера, а интервал таймера установить в значение меньшее чем wait_timeout сервера (чтобы интервалы между получениями сервером команд не превышали wait_timeout).

OnConnectionLost событие происходит только при выполнении следующих условий:
- происходит фатальная ошибка;
- в соединении нет открытых транзакций, которые не являются ReadOnlyReadCommitted (если соединение имеет хотя бы одну открытую транзакцию, которая не является ReadCommitedReadOnly, FailOver не выполняется. Все ReadCommitedReadOnly транзакции восстанавливаются при помощи FailOver операции);
- если нет открытых или недочитанных датасетов;
- нет явно препарированных датасетов или SQL запросов.
Пожалуйста, убедитесь, что ни одно из вышеуказанных условий не нарушено.
ViktorV
Ср 28 ноя 2018 14:46
Форум: Universal Data Access Components
Тема: Автозагрузка размера текстового поля TField
Ответы: 1
Просмотры: 5635

Re: Автозагрузка размера текстового поля TField

На данный момент UniDAC не поддерживает указанную вами функциональность.
Если Вы хотите, чтобы мы добавили данную функциональность, пожалуйста, напишите об этом на нашем User Voice форуме: https://devart.uservoice.com/forums/104 ... components. Если Ваше предложение наберет достаточно голосов, мы рассмотрим возможность его создания.
ViktorV
Ср 28 ноя 2018 14:31
Форум: Universal Data Access Components
Тема: Автогенерация InsertSQL, UpdateSQL
Ответы: 1
Просмотры: 5574

Re: Автогенерация InsertSQL, UpdateSQL

Мы не видим целесообразности добавления данной функциональности. Но, если Вы хотите, чтобы мы добавили данную функциональность, пожалуйста, напишите об этом на нашем User Voice форуме: https://devart.uservoice.com/forums/104 ... components. Если Ваше предложение наберет достаточно голосов, мы рассмотрим возможность его создания.
Для решения вашей задачи, вы можете объявить наследника TUniQuery и добавить необходимые методы.
Обратите внимание, в коде задействованы внутренние методы и неправильное их использование может привести к непредсказуемым последствиям.
ViktorV
Пн 03 сен 2018 09:55
Форум: MySQL Data Access Components
Тема: итоги в TCRDBGRid
Ответы: 1
Просмотры: 12728

Re: итоги в TCRDBGRid

Для решения вашей задачи вы можете использовать следующий код:

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

var
  StrValue: string;
  Value: variant;
...
  StrValue := CRDBGrid.Columns[0].TotalString;
  Value := CRDBGrid.Columns[0].TotalValue;
ViktorV
Вт 21 авг 2018 09:48
Форум: InterBase Data Access Components
Тема: Является ли это ошибкой или нет?
Ответы: 1
Просмотры: 12935

Re: Является ли это ошибкой или нет?

1. Компоненты TUniQuery является наследником базового класса TDataSet и реализуют его интерфейс. Как указано в документации http://docwiki.embarcadero.com/Librarie ... ataSet.Eof свойство Eof устанавливается в True при вызове метода Last.
2. Свойство AutoCommit по-умолчанию имеет значение True, что приводит к автоматическому выполнению CommitRetaining или RollbackRetaining при любой модификации данных. Установив свойство в False, Вы избавитесь от такого поведения, однако, управлять транзакциями Вам придется самостоятельно.
Так как вы устанавливаете UniConnection.AutoCommit в True при вызове TUniQuery.ExecSQL будет автоматически вызван метод TUniTransaction.CommitRetaining.
Если вам требуется ручное управление транзакций - установите TUniQuery.AutoCommit в False.
ViktorV
Пн 29 янв 2018 10:58
Форум: Oracle Data Access Components
Тема: Ошибка dac140.bpl AddRefStr failed (D:\Projects\Delphi\Dac\Common\Source\MemData.pas)
Ответы: 1
Просмотры: 13302

Re: Ошибка dac140.bpl AddRefStr failed (D:\Projects\Delphi\Dac\Common\Source\MemData.pas)

К сожалению, нам не удалось воспроизвести проблему. Чтобы понять причину возникновения проблемы и найти решение для ее исправления, нам необходим тестовый пример, в котором проблема стабильно воспроизводится. Как только мы получим такой пример и, если причина проблемы будет в коде нашего продукта, мы постараемся в кратчайшие сроки ее исправить. Пожалуйста, составьте и вышлите нам, с помощью контактной формы https://www.devart.com/company/contactform.html, полный пример, демонстрирующий указанное вами поведение, включающий скрипты для создания и заполнения объектов БД.
ViktorV
Пн 29 янв 2018 10:57
Форум: Oracle Data Access Components
Тема: Возникновении ошибки Assertion failure (MemData.pas, line 7245))
Ответы: 4
Просмотры: 16282

Re: Возникновении ошибки Assertion failure (MemData.pas, line 7245))

Мы просим прощение за неточность. Да, действительно данное исправление не вошло в ODAC 10.1.4, оно войдет в следующий билд ODAC.
Мы можем выслать вам ночной билд ODAC, включающий данное исправление. Для этого, пожалуйста, пришлите нам свой регистрационный номер и используемые IDE на viktorv*devart*com.
ViktorV
Пн 29 янв 2018 10:38
Форум: MySQL Data Access Components
Тема: Транзакции в MyDac
Ответы: 5
Просмотры: 19253

Re: Транзакции в MyDac

Спасибо за интерес к нашим продуктам и помощь в их развитии.
Обращайтесь к нам, если у Вас возникнут вопросы по нашим продуктам.
ViktorV
Ср 24 янв 2018 13:29
Форум: MySQL Data Access Components
Тема: Транзакции в MyDac
Ответы: 5
Просмотры: 19253

Re: Транзакции в MyDac

Вызов метода Rollback отменяет изменения данных на сервере, которые произошли после вызова метода StartTransaction. Изменения отправляются на сервер после вызова метода Post, когда вы перемещаетесь по записям в DBGrid, метод Post вызывается автоматически. В вашем случае, когда вы редактируете поле, метод Post еще не вызван и вызов метода Rollback не применится к данным этого поля.
Для решения вашей задачи, вы можете вместо комбинации DBNaviganor.Refresh - кнопка Rollback - DBNaviganor.Refresh вызывать правильную комбинацию: MyQuery.Post - кнопка Rollback - DBNaviganor.Refresh. Также, для отмены изменений редактирования поля, вы можете вызывать метод TMyQuery.Cancel.