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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2013, 23:43   #1
sergeant94
Пользователь
 
Регистрация: 10.06.2013
Сообщений: 27
По умолчанию Не работает код

Код:
procedure TForm5.Button1Click(Sender: TObject);
begin
      Try
      with dmg.rooms do //работаем с таблицей
      begin                   //начинаем
      first;                   //выбераем первую строку
      while not eof do    //пока не закончится таблица
       Begin                 //начинаем 
       edit;                  //режим редактирования 
       IF ((fieldValues['number']=dbcombobox3.Text)and(fieldValues['svob']='Çàíÿò')) then //если если  таблице есть номер указанный при регистрации и в поле svob  написано занят
       showmessage('Ýòîò íîìåð íà ýòî âðåìÿ íåäîñòóïåí'); //выводим сообщение
       next;           //следующая строка
       end;           //end
      end;              //end

     Except
      IF monthCalendar1.date>(main.today-1) then    //если указанная дата при регистрации , больше вчерашней то
      begin            //начинаем   
      dmg.clients.FieldValues['kol']:=1;        //поле количество посещений клиента =1
      dmg.clients.FieldValues['pasport']:=DBEdit4.text; //поле паспортные данные с  DBEdit4.text
      dmg.clients.post;                  //заносим дданные в таблицу клиентов
      dbedit7.text:=dmg.clients.FieldValues['CLid'];        //dbedit7 заносит код клиента в таблицу active_rooms из поля кода клиента таблицы clients
      dmg.active_rooms.FieldValues['DPos']:=MonthCalendar1.Date;    //Дата поселения таблицы active_rooms =дата из календаря при регистрации
      dmg.active_rooms.FieldValues['prim']:=DBEdit6.text + ' (Öåíà çà ñóòêè: ' + Label8.Caption + ')'; //Примечание таблицы active_rooms =DBEdit6.text+'Цена за сутки номера'+Label8.Caption+')'
      dmg.active_rooms.post;         //заносим данные в таблицу active_rooms
      end;           //конец

     with dmg.rooms do              //работаем с таблицей rooms
     begin                             //начинаем
     first;                             //первая строка
     while not eof do                //пока не закончится
      Begin                       // делаем
      edit;                      //режим редактирования
      IF fieldValues['number']=dbcombobox3.Text then      если поле number=указанного номера при регистрации 
      fieldValues['svob']:='Çàíÿò';                         // поле svob заносится 'занят'
      next;                              //следующая строка
      end;                      //end
     end;                     //end
     close;                //закрываем форму
    end;                //end

    IF monthCalendar1.date<(main.today-1) then        //  если указанная дата при регистрации меньше чем сегодняшняя или вчерашняя(тут не докапыватся пожалуйста)
        begin                           //начинаем
        showmessage('Îøèáêà ñ äàòîé.');               //показываем сообщение что Ошибка с датой
        end;               //заканчиваем

end;         // конец
после try проверяем свободен ли номер.
после except если дата больше чем вчера то заносим данные регистрируем.Но если дата меньше чем сегодня, то выводим сообщение и не закрываем форму. не работает после Except, но IF что дата меньше чем сегодня работает.

Последний раз редактировалось sergeant94; 19.06.2013 в 12:22.
sergeant94 вне форума Ответить с цитированием
Старый 19.06.2013, 00:56   #2
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

Цитата:
не работает после Except, но IF что дата меньше чем сегодня работает.
может стоит сначала понять принцип работы try ... except ...
раз не выполняется блок except - значит не доходит до него дело.
да и вообще, sergeant94, расскажи что в твоем понимании должна делать приведенная выше конструкция ... прокомментируй каждую строку. незнаю как другим, а мне лично там нифига не ясно, + еще и после того как я тебе уже подсказал как этосделать проще, но ты всё-равно упрямо стоишь на своем - аргументируй свое решение
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Старый 19.06.2013, 12:09   #3
sergeant94
Пользователь
 
Регистрация: 10.06.2013
Сообщений: 27
По умолчанию

я же тебе уже объяснял почему
sergeant94 вне форума Ответить с цитированием
Старый 19.06.2013, 12:09   #4
sergeant94
Пользователь
 
Регистрация: 10.06.2013
Сообщений: 27
По умолчанию

так тоже можно сделать, я пока не сделаю не успокоюсь, сейчас прокомментирую каждую строку
sergeant94 вне форума Ответить с цитированием
Старый 19.06.2013, 12:23   #5
sergeant94
Пользователь
 
Регистрация: 10.06.2013
Сообщений: 27
По умолчанию

все закомментировал теперь помоги пожалуйста а
sergeant94 вне форума Ответить с цитированием
Старый 19.06.2013, 12:37   #6
Dark_Spirit
Форумчанин
 
Аватар для Dark_Spirit
 
Регистрация: 05.02.2009
Сообщений: 324
По умолчанию

тебе ведь уже человек написал
Цитата:
может стоит сначала понять принцип работы try ... except ...
блок после except будет работать в том случае если блок после try вызовёт ошибку, а ты хочешь чтобы он у тебя работал как конструкция if.....then... else....

и всё таки проще использовать запросы, судя из твоей программы ничего сложного в них не будет

Цитата:
Код:
      with dmg.rooms do //работаем с таблицей
      begin                   //начинаем
      first;                   //выбераем первую строку
      while not eof do    //пока не закончится таблица
       Begin                 //начинаем 
       edit;                  //режим редактирования 
       IF ((fieldValues['number']=dbcombobox3.Text)and(fieldValues['svob']='Çàíÿò')) then //если если  таблице есть номер указанный при регистрации и в поле svob  написано занят
       showmessage('Ýòîò íîìåð íà ýòî âðåìÿ íåäîñòóïåí'); //выводим сообщение
       next;           //следующая строка
       end;           //end
      end;              //en
вот даж тут ты даже если находишь занятую запись, всё равно пробегаешь до конца таблицы, в этом нет никакого смысла только, грузить комп ненужной работой
Тяжело быть бестолковым.....
Dark_Spirit вне форума Ответить с цитированием
Старый 19.06.2013, 12:41   #7
sergeant94
Пользователь
 
Регистрация: 10.06.2013
Сообщений: 27
По умолчанию

блин ну поэтому я прощу помощи у тех кто больше меня понимает, вместо того чтобы критиковать, хоть кто нибудь взял бы да и помог чтоли, я хоть чтото написал с горем пополам что смог, и спрашиваю, как лучше реаплизовать что я хочу, ведь то что написал не работает

может тогда без try except, сейчас все методом тыка понаубирал
Код:
procedure TForm5.Button1Click(Sender: TObject);
begin
      showmessage(inttostr(DBEdit6.tag));
      with dmg.rooms do
      begin
      first;
      while not eof do
       Begin
       edit;
       IF ((fieldValues['number']=dbcombobox3.Text)and(fieldValues['svob']='Çàíÿò')) then
       showmessage('Ýòîò íîìåð íà ýòî âðåìÿ íåäîñòóïåí');
       DBEdit6.tag:=1;
       next;
       end;
      end;


      IF ((trunc(monthCalendar1.date)>(main.today-1)) and (DBEdit6.tag<>1)) then
      begin
      showmessage('asdas');
      dmg.clients.FieldValues['kol']:=1;
      dmg.clients.FieldValues['pasport']:=DBEdit4.text;
      dmg.clients.post;
      dbedit7.text:=dmg.clients.FieldValues['CLid'];
      dmg.active_rooms.FieldValues['DPos']:=MonthCalendar1.Date;
      dmg.active_rooms.FieldValues['prim']:=DBEdit6.text + ' (Öåíà çà ñóòêè: ' + Label8.Caption + ')';
      dmg.active_rooms.post;


      with dmg.rooms do
       begin
       first;
       while not eof do
        Begin
        edit;
        IF fieldValues['number']=dbcombobox3.Text then
        fieldValues['svob']:='Çàíÿò';
        next;
        end;
       end;

       IF monthCalendar1.date<(main.today-1) then
        begin
        showmessage('Îøèáêà ñ äàòîé.');
        end;

     end;
     DBEdit6.tag:=0;
       close;
end;
но это все равно не работает(((((((ну помогите кто нибудь

ладно ну как использовать запросы подскажите пошагово, я вообще не шарю честное слово

Последний раз редактировалось Stilet; 19.06.2013 в 15:49.
sergeant94 вне форума Ответить с цитированием
Старый 19.06.2013, 12:53   #8
Dark_Spirit
Форумчанин
 
Аватар для Dark_Spirit
 
Регистрация: 05.02.2009
Сообщений: 324
По умолчанию

ну для начала:
Код:
procedure TForm5.Button1Click(Sender: TObject);
begin
      Try
      with dmg.rooms do //работаем с таблицей
      begin                   //начинаем
      first;                   //выбераем первую строку
      while not eof do    //пока не закончится таблица
       Begin                 //начинаем 
       edit;                  //режим редактирования 
       IF ((fieldValues['number']=dbcombobox3.Text)and(fieldValues['svob']='Çàíÿò')) then //если если  таблице есть номер указанный при регистрации и в поле svob  написано занят
       showmessage('Ýòîò íîìåð íà ýòî âðåìÿ íåäîñòóïåí'); //выводим сообщение
       next;           //следующая строка
       end;           //end
      end;              //end

     Except
      IF monthCalendar1.date>(main.today-1) then    //если указанная дата при регистрации , больше вчерашней то
      begin            //начинаем   
      dmg.clients.FieldValues['kol']:=1;        //поле количество посещений клиента =1
      dmg.clients.FieldValues['pasport']:=DBEdit4.text; //поле паспортные данные с  DBEdit4.text
      dmg.clients.post;                  //заносим дданные в таблицу клиентов
      dbedit7.text:=dmg.clients.FieldValues['CLid'];        //dbedit7 заносит код клиента в таблицу active_rooms из поля кода клиента таблицы clients
      dmg.active_rooms.FieldValues['DPos']:=MonthCalendar1.Date;    //Дата поселения таблицы active_rooms =дата из календаря при регистрации
      dmg.active_rooms.FieldValues['prim']:=DBEdit6.text + ' (Öåíà çà ñóòêè: ' + Label8.Caption + ')'; //Примечание таблицы active_rooms =DBEdit6.text+'Цена за сутки номера'+Label8.Caption+')'
      dmg.active_rooms.post;         //заносим данные в таблицу active_rooms
      end;           //конец
эту вот часть попробуем переделать таким образом(исходя из того что ты уже наваял)

Код:
procedure TForm5.Button1Click(Sender: TObject);
 var nashol:boolean;//переменная для поиска
begin
  nashol:=false;
     with dmg.rooms do //работаем с таблицей
      begin                   //начинаем
      first;                   //выбераем первую строку
      while not eof do    //пока не закончится таблица
       Begin                 //начинаем 
//       edit;                  //режим редактирования (он тут не нужен если только ищем клиента)
       IF ((fieldValues['number']=dbcombobox3.Text)and(fieldValues['svob']='Çàíÿò')) 
         then //если если  таблице есть номер указанный при регистрации и в поле svob  написано занят
            begin
              showmessage('Ýòîò íîìåð íà ýòî âðåìÿ íåäîñòóïåí'); //выводим сообщение
              nashol:=true; 
              last; // если уже найдена соответствующая запись зачем пробегать всю таблицу
        end;
       next;           //следующая строка
       end;           //end
      end;              //end

  if nashol=false 
   then //если не нашёл такую запись тада заполняй
      IF monthCalendar1.date>(main.today-1) then    //если указанная дата при регистрации , больше вчерашней то
      begin            //начинаем   
      dmg.clients.FieldValues['kol']:=1;        //поле количество посещений клиента =1
      dmg.clients.FieldValues['pasport']:=DBEdit4.text; //поле паспортные данные с  DBEdit4.text
      dmg.clients.post;                  //заносим дданные в таблицу клиентов
      dbedit7.text:=dmg.clients.FieldValues['CLid'];        //dbedit7 заносит код клиента в таблицу active_rooms из поля кода клиента таблицы clients
      dmg.active_rooms.FieldValues['DPos']:=MonthCalendar1.Date;    //Дата поселения таблицы active_rooms =дата из календаря при регистрации
      dmg.active_rooms.FieldValues['prim']:=DBEdit6.text + ' (Öåíà çà ñóòêè: ' + Label8.Caption + ')'; //Примечание таблицы active_rooms =DBEdit6.text+'Цена за сутки номера'+Label8.Caption+')'
      dmg.active_rooms.post;         //заносим данные в таблицу active_rooms
      end;           //конец
ну вродь так. было бы не плохо ещё и условие задачи студию ))
Тяжело быть бестолковым.....
Dark_Spirit вне форума Ответить с цитированием
Старый 19.06.2013, 13:08   #9
sergeant94
Пользователь
 
Регистрация: 10.06.2013
Сообщений: 27
По умолчанию

спасибо большой тебе, но я уже решил обходным путем, если поле svob номера = занят вообще не добавлять в комбобокс, разгадка была в 2 сантиметрах, надо просто додуматся было, что касается Yurk@ вообще только нервничать заставлял, своими всякими упреками, критикой и т.п. Объяснял же что первая моя программа, как будто не был на моем месте...
sergeant94 вне форума Ответить с цитированием
Старый 19.06.2013, 13:20   #10
Dark_Spirit
Форумчанин
 
Аватар для Dark_Spirit
 
Регистрация: 05.02.2009
Сообщений: 324
По умолчанию

по поводу запросов: кидаешь на форму TQuery (или в DataModule если он конешно есть), соответственно настраиваешь его, а потом в свойство SQL записываешь текст запроса:
Код:
1. select [можно_любое_поле_твоей_таблицы] from [имя_твоей_таблицы] 
2. where number=:num and svob=:svob
что мы тут написали:
в 1-ой строке команда выбора какого нибудь поля из твоей таблицы, обязательное условие чтобы поле было в таблице,и не нужно писать в квадратных скобках, это для того чтобы ты видел что нужно заменить
во 2-ой строке интерпретация твоего условия
Код:
IF ((fieldValues['number']=dbcombobox3.Text)and(fieldValues['svob']='Çàíÿò'))
:num - переменная запроса куда ты запишешь номер из dbcombobox3.Text
:svob - переменная запроса куда ты запишешь 'Çàíÿò'

двоеточие обязательно должно присутствовать

теперь как это будет выглядеть в программе:
Код:
// считаем что у тебя уже всё настроено и TQuery подлючено

str_sql:='select [можно_любое_поле_твоей_таблицы] from [имя_твоей_таблицы]+#13+where number=:num and svob=:svob'

query1.active:=false; //на всякий случай отключим квери если он вдруг был активным

query1.sql.add(str_sql); //записываем строку sql-запроса в квери

query1.parambyname('nom').value = [твоё значение];//задаём значение переменой nom (обрати внимание что двоеточия нету)
query1.parambyname('svob').value = [твоё_значение];//действия аналогичные предыдущей строке  

query1.active:=true;// активизируем запрос чтобы он выполнился

if query1.isEmpty// результат выполнения (IsEmpty - проверка пустой зарпос или нет, если пустой блок после then, если не пустой - блок после else)
 then
   []//
 else
   []//
Тяжело быть бестолковым.....
Dark_Spirit вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не работает код GS3 PHP 0 05.07.2012 15:57
не работает код Кинельски Общие вопросы Delphi 1 26.10.2011 20:26
Код не работает в IE asdasdasdasd HTML и CSS 5 24.08.2010 19:36
Не работает код. ApxuKILLER Общие вопросы .NET 2 20.05.2010 00:46