Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2016, 18:43   #1
edsjeka
Пользователь
 
Регистрация: 01.01.2016
Сообщений: 98
По умолчанию Не работает RecordCount

Вот такой код. Компилируется нормально, но потом при выполнении последней строки кода выдается ошибка: [0x0005]: Operation Not Supported
Код:
 try
   DataModule1. SQLConnection1.StartTransaction(tr1); //начало транзакции
   SQLQuery1.Active:=false;
   SQLQuery1.SQL.Text:='SELECT everydayrep.IDCartridga, everydayrep.DateRabot, everydayrep.Tehnika_Rabota,'+
      ' everydayrep.IDMastera, sprmasterov.Master, sprmasterov.IDMastera'+
      ' FROM everydayrep'+
      ' INNER JOIN sprmasterov ON everydayrep.IDMastera = sprmasterov.IDMastera'+
      ' WHERE sprmasterov.Master = "Иванов Иван"';
   SQLQuery1.Active:=true;
  except
   MessageDlg('ошибка транзакции 1', mtError, [mbOk],0);
   DataModule1.SQLConnection1.Rollback(tr1); //откат транзакции
  end;
   DataModule1.SQLConnection1.Commit(tr1); //подтверждение транзакции
   Label10.Caption:=IntToStr(SQLQuery1.RecordCount);
Если убираю условие
Код:
 WHERE sprmasterov.Master = "Иванов Иван"';
, тогда работает. В других местах работает с условием все нормально, а тут не хочет. В чем может быть проблема?
edsjeka вне форума Ответить с цитированием
Старый 19.05.2016, 18:57   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А двойные кавычки замени на одинарные
Код:
WHERE sprmasterov.Master = ''Иванов Иван''';
Явную транзакцию для селекта обязательно? Если уж исключение ловишь, то какой ролбак при ошибке на старте транзакции? Она и не запустится, ролбак вдобавок еще исключение подымет. При ошибке на Active:=true ролбак нужен

PS

RecordCount при чем? Чего ему работать на не активном датасете? А у тебя управление передастся на эту команду и при исключении во время активизации. И даже если все ok рекордкоунт еще может вернуть неправильные данные при таком подходе. Это зависит от настройки соединения
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 19.05.2016 в 19:10.
Аватар вне форума Ответить с цитированием
Старый 19.05.2016, 19:04   #3
edsjeka
Пользователь
 
Регистрация: 01.01.2016
Сообщений: 98
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
А двойные кавычки замени на одинарные
Код:
WHERE sprmasterov.Master = ''Иванов Иван''';
Тогда вообще ошибка сразу при компилировании, мне давно говорили, что нужно вместо кавычек использовать специальную функцию, никак не дойду до нее, чтобы разобраться, но тут дело не в кавычках, у меня в этой программе куча запросов, где используются двойные кавычки и все работает нормально.
edsjeka вне форума Ответить с цитированием
Старый 19.05.2016, 19:06   #4
edsjeka
Пользователь
 
Регистрация: 01.01.2016
Сообщений: 98
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Явную транзакцию для селекта обязательно? Если уж исключение ловишь, то какой ролбак при ошибке при старте транзакции? Она и не запустится, ролбак вдобавок еще исключение подымет. При ошибке на Active:=true ролбак нужен
Тут спасибо, никто толком про транзакции объяснить не может или не хочет, делаю как сам думаю.
edsjeka вне форума Ответить с цитированием
Старый 19.05.2016, 19:10   #5
edsjeka
Пользователь
 
Регистрация: 01.01.2016
Сообщений: 98
По умолчанию

[QUOTE=
PS

RecordCount при чем? Чего ему работать на не активном датасете? А у тебя управление передастся на эту команду и при исключении во время активизации[/QUOTE]
Да я транзакцию когда убираю, ничего не меняется, та же ошибка. А почему не активный датасет, ведь я делаю SQLQuery1.Active:=true;
edsjeka вне форума Ответить с цитированием
Старый 19.05.2016, 19:13   #6
edsjeka
Пользователь
 
Регистрация: 01.01.2016
Сообщений: 98
По умолчанию

А почему тогда здесь работает:
Код:
procedure TFMLazKart.BitBtn22Click(Sender: TObject);
var sum:integer;
begin
 DataModule1.SQLQuery1.Close;
 DataModule1.SQLQuery1.SQL.Text:='Select * From Cartridgi';
 DataModule1.SQLQuery1.Active:=true;
 sum:=DataModule1.SQLQuery1.RecordCount;
MessageDlg('Общее количество картриджей в базе:'+IntToStr(sum), mtInformation, [mbOk], 0);
end;
edsjeka вне форума Ответить с цитированием
Старый 19.05.2016, 19:21   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

QuotedStr экранирует строку в кавычки, что то же самое как в #2. Фокус наведи на то сообщение.
Цитата:
А почему тогда здесь работает
А я и не говорил, что всегда не правильно. А ты выдерни запросом хотя бы несколько сотен записей и проверь. Запрос не обязательно сразу все данные клиенту возвращает. Возможна и подкачка. Но это все зависит от настройки соединения. И разберись с try ... except. Судя по твоим коментам суть не понимаешь
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.05.2016, 19:23   #8
edsjeka
Пользователь
 
Регистрация: 01.01.2016
Сообщений: 98
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
QuotedStr экранирует строку в кавычки, что то же самое как в #2. Фокус наведи на то сообщение.А я и не говорил, что всегда не правильно.
Все-таки проблема может быть в кавычках?
edsjeka вне форума Ответить с цитированием
Старый 19.05.2016, 19:27   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Да сделай так, как в #2. Кавычку перед where еще не забудь, небось без неё строку в код впялил
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 19.05.2016, 19:31   #10
edsjeka
Пользователь
 
Регистрация: 01.01.2016
Сообщений: 98
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Кавычку перед where еще не забудь, небось без неё строку в код впялил
Почему без нее, в #1 все показано как я ее впялил.
edsjeka вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена свойства RecordCount для второстепенного (зависимого) DataSet KBO Помощь студентам 0 15.11.2015 20:32
ADOQuery1.RecordCount показывает неверное количество записей Женя32 БД в Delphi 8 19.01.2015 22:22
Сброс RecordCount alfikss БД в Delphi 38 29.07.2013 15:13
RecordCount в dbExpress при запросе SELECT с параметром Leximus БД в Delphi 0 31.05.2012 09:50
Проблема с RecordCount в SQLQuery Stalevar БД в Delphi 2 23.04.2009 18:57