|
Вопрос # 1 159/ вопрос открыт / |
|
Здравствуйте, эксперты!
Я делаю запрос в DLL, потом вызываю его процедурой. Выходит все хорошо, но сталкнулся с такой ситуацией, при создании параметра из DLL, возникает ошибка.
Запрос естественно выполнимый, т. е. В виде Insert , Delete или Update. Где искать причину не могу найти?
Приложение: Переключить в обычный режим- Procedure CreateQueryMy(QDataBaseName: String; QSQL: String; valDate:TDateTime); stdcall;
- begin
-
- Result:=True;
-
- //
- Query1:= TQuery.Create(nil);
- try
- Query1.DataBaseName:=QDataBaseName;
- Query1.SQL.Text:=QSQL;
- Query1.Prepare;
- Query1.Params[0].AsDateTime:=valDate;
- Query1.ExecSQL;
-
- finally
- Query1.Close;
- Query1.Free;
- end;
-
- end;
 |
Вопрос задал: Oleg_Borisov (статус: Посетитель)
Вопрос отправлен: 30 ноября 2007, 16:42
Состояние вопроса: открыт, ответов: 2.
|
Ответ #1. Отвечает эксперт: Вадим К
Здравствуйте, Oleg_Borisov!
Уже не один раз обсуждалось, если передаёте в длл параметры типа string, будут проблемы. А всё из за того, что используется разный менеджер памяти. Для решения проблемы, необходимо в dpr файл проекта и длл добавить в список uses юнит ShareMem, причём самым первым. Также прийдётся таскать за собой потом ещё длл - borlmm.dll.
Но можно и по другому - использовать тип WideString - это юникодный вариант String. Делфи делает автоматическое приведение типа и вы не заметите проблем с его использованием.
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 30 ноября 2007, 16:53
|
Ответ #2. Отвечает эксперт: Feniks
Здравствуйте, Oleg_Borisov!
Дополнение к Вадим К.
А так же можно использовать тип PChar. Если Вы не будете использовать String, тогда юнит ShareMem указывать в uses не надо и borlmm.dll тоже. Хотя это на любителя.
Какой именно использовать тип решать Вам, судя по обстоятельствам и поставленной задачи.
И второй момент. Я не понял, к чему там "Result:=True", если Вы описали процедуру ?
 |
Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 30 ноября 2007, 17:28
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|