powered by simpleCommunicator - 2.0.37     © 2025 Programmizd 02
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FireDac, MSSQL ошибка при вызове StartTransaction.
23 сообщений из 23, страница 1 из 1
FireDac, MSSQL ошибка при вызове StartTransaction.
    #40082110
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фактически внутри при попытке сделать SQLSetConnectAttr SQL_AUTOCOMMIT получаю

[FireDAC][Phys][ODBC][msodbcsql17.dll] SQL_ERROR

без каких либо других пояснений. Ошибка плавающая, попытки специально воспроизвести ни к чему не приводят. Может кто-то сталкивался?
...
Рейтинг: 0 / 0
FireDac, MSSQL ошибка при вызове StartTransaction.
    #40082111
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приложение не многопоточное ли?
...
Рейтинг: 0 / 0
FireDac, MSSQL ошибка при вызове StartTransaction.
    #40082113
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну по факту нет. Там есть доп поток, для него есть доп. соединение и оно делает исключительно select
...
Рейтинг: 0 / 0
FireDac, MSSQL ошибка при вызове StartTransaction.
    #40082171
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael Longneck,

OFF-TOPIC
просто удивлён, а зачем там ODBC?
...
Рейтинг: 0 / 0
FireDac, MSSQL ошибка при вызове StartTransaction.
    #40082174
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В смысле? Внутри FireDac использует ODBC для доступа к MSSQL
...
Рейтинг: 0 / 0
FireDac, MSSQL ошибка при вызове StartTransaction.
    #40082193
Фотография Кроик Семён
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael Longneck,

интересно.. а зачем?
ведь стандартный доступ к MSSQL это драйвер OLEDB

P.S.
http://docwiki.embarcadero.com/RADStudio/Sydney/en/Connect_to_Microsoft_SQL_Server_(FireDAC)
"We strongly recommend that you have SQL Native Client installed"
...
Рейтинг: 0 / 0
FireDac, MSSQL ошибка при вызове StartTransaction.
    #40082196
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроик Семёнведь стандартный доступ к MSSQL это драйвер OLEDB

Для его вкуривания нужна слишком ядовитая трава. Не зря он был deprecated столько лет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireDac, MSSQL ошибка при вызове StartTransaction.
    #40082197
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
06.07.2021 18:47, Dimitry Sibiryakov пишет:
> Для его вкуривания нужна слишком ядовитая трава. Не зря он был deprecated столько лет.

дык и ODBC был в свое время deprecated.
всё зависит от того, какой именно сорт травы предпочитают CEO M$, курирующие направление СУБД.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireDac, MSSQL ошибка при вызове StartTransaction.
    #40082200
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все обычные рекомендации я исполнил, версия драйверов у меня свежая и.т.д. Но почему может обламываться установка AUTOCOMMIT в свойствах соединения ODBC я не знаю. И диагностической информации тоже нет, и попытки воспроизвести под отладчиком ни к чему не привели.... Дмитрий Арефьев разве что если что подскажет.
...
Рейтинг: 0 / 0
FireDac, MSSQL ошибка при вызове StartTransaction.
    #40082201
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийдык и ODBC был в свое время deprecated.

Но для него по крайней мере код компактнее.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireDac, MSSQL ошибка при вызове StartTransaction.
    #40082203
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqlsetconnectattr-function?view=sql-server-2017
утверждает, что тут может мешаться DTS. Попробуй получить диагностику со стороны сервера,
Profiler там или ещё какое-нибудь вуду...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
FireDac, MSSQL ошибка при вызове StartTransaction.
    #40082204
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да трудно это. Невозможно на весь день профайлер поставить...

Пока у меня идея созрела вместо ODBC (FireDac) методов втупую исполнять SET IMPLICIT_TRANSACTION OFF\ON, COMMIT, ROLLBACK
прямыми командами....
...
Рейтинг: 0 / 0
FireDac, MSSQL ошибка при вызове StartTransaction.
    #40082218
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хз ... возможно, что-то где-то стартует транзакцию перед этим вызовом ...
...
Рейтинг: 0 / 0
FireDac, MSSQL ошибка при вызове StartTransaction.
    #40090043
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итак, решение. Ошибка возникнет, если вызвать Query или StoredProc через ExecSQL, а сам sql код при этом возвращает resultset. Всё пройдёт без ошибок, но при попытке вызвать TDConnection.StartTransaction будет невнятная SQL_ERROR. Лечение - либо открывать через Open (OpenOrExecute) либо делать Query.Disconnect(AbortJob = True).
...
Рейтинг: 0 / 0
FireDac, MSSQL ошибка при вызове StartTransaction.
    #40094765
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дополню. Как определить в FireDac (тестировал только MSSQL) есть ли resultset, если вы сделали ExecSQL вместо Open
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
function FDRecordSetExists(ACmd: TFDCustomCommand): Boolean;
var
  oiCmd: IFDPhysCommand;
  oStmnt: TODBCCommandStatement;
begin
  Result := False;
  oiCmd := ACmd.CommandIntf;
  if oiCmd <> nil then
  begin
    oStmnt := TODBCCommandStatement(oiCmd.CliObj);
    if oStmnt <> nil then
      Result := oStmnt.ResultColsExists;
  end;
end;
...
Рейтинг: 0 / 0
FireDac, MSSQL ошибка при вызове StartTransaction.
    #40094790
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы переписал так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
function FDRecordSetExists(ACmd: TFDCustomCommand): Boolean;
var
  oiCmd: IFDPhysCommand;
  oStmnt: TObject;
begin
  Result := False;
  oiCmd := ACmd.CommandIntf;
  if oiCmd <> nil then
  begin
    oStmnt := TObject(oiCmd.CliObj);
    if oStmnt <> nil then
    begin
      if oStmnt is TODBCStatementBase then
        Result := TODBCStatementBase(oStmnt).ResultColsExists;
      else
        raise Exception.Create('Unknown statement type')
    end;
  end;
end;

А может быть будет работать и так
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
function FDRecordSetExists(ACmd: TFDCustomCommand): Boolean;
var
  oiCmd: IFDPhysCommand;
begin
  Result := False;
  oiCmd := ACmd.CommandIntf;
  Result := (oiCmd <> nil) and oiCmd.NextRecordSet;
end;
...
Рейтинг: 0 / 0
FireDac, MSSQL ошибка при вызове StartTransaction.
    #40094800
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NextRecordSet не просто проверит, а ещё и изменит состояние для Command переданного из TFDQuery.Command. Про проверку на TODBCStatementBase согласен, всё таки это глубокое залезание в малодокументированные потроха FireDac. Но в целом я не верю что там Дмитрий что-то поменяет так серьёзно...
...
Рейтинг: 0 / 0
FireDac, MSSQL ошибка при вызове StartTransaction.
    #40094808
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael Longneck
ещё и изменит состояние
Точно? Смотрел исходники? Потому, что NextRecordSet это свойство, а не метод
...
Рейтинг: 0 / 0
FireDac, MSSQL ошибка при вызове StartTransaction.
    #40094811
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael Longneck,

Код: pascal
1.
2.
3.
4.
function TFDPhysCommand.GetNextRecordSet: Boolean;
begin
  Result := FNextRecordSet;
end;

Никакой смены состояния. Просто неудачное название свойства
...
Рейтинг: 0 / 0
FireDac, MSSQL ошибка при вызове StartTransaction.
    #40094812
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, посмотрел. Перепутал с NextRecordSet самого TFDQuery. Но название и правда тут неудачное
...
Рейтинг: 0 / 0
FireDac, MSSQL ошибка при вызове StartTransaction.
    #40094814
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael Longneck
Но в целом я не верю что там Дмитрий что-то поменяет так серьёзно...
Это я к тому, что завтра ты сменишь провайдера и будешь долго удивляться неадекватной работе программы. А так получишь исключение, добавишь проверку для нового типа и вперед
...
Рейтинг: 0 / 0
FireDac, MSSQL ошибка при вызове StartTransaction.
    #40094817
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael Longneck,

Кстати, проверь. Оно решает проблему? Самому интересно
...
Рейтинг: 0 / 0
FireDac, MSSQL ошибка при вызове StartTransaction.
    #40094838
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мою основную? Да. Я могу определить что там есть ResultSet и сделать как минимум Disconnect(True); А как максимум напинать автора процедуры который сделал нехорошее.
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FireDac, MSSQL ошибка при вызове StartTransaction.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]