Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.06.24;
Скачать: [xml.tar.bz2];

Вниз

Как проверить таблицу на запись   Найти похожие ветки 

 
Ulugbek   (2007-03-30 10:20) [0]

Привет всем уважаемый мастера!
Помогите в одном деле!
Например когда ползователь вводить дату ему сообщалась что есть такое дата в таблице
"хотите занова добавить или заменить итд"
Как это делаеться помогите срочно
Заранее блогодарен


 
Sergey13 ©   (2007-03-30 10:24) [1]

Лови исключение и выполняй нужное тебе действие. Или перед действием выполняй проверку на его допустимость. Второй вариант менее надежен при многопользовательской работе с БД.


 
ЮЮ ©   (2007-03-30 10:25) [2]

> Как это делаеться помогите срочно

Код в соответсвующих обработчиках соответсвующих компонентов пишется.
Думаешь, TTable, TDataSource и TDBGrid на форму кинул - и программа готова?


 
Jan   (2007-03-30 10:27) [3]


> Например когда ползователь вводить дату ему сообщалась что
> есть такое дата в таблице
> "хотите занова добавить или заменить итд"

что такое дата?


 
ЮЮ ©   (2007-03-30 10:30) [4]

Кстати, филолога в команду не забудь пригласить, а то твои сообщения вообще введут пользователя в ступор :)


 
Улугбек   (2007-03-30 10:50) [5]

Есть dateTime picker ну ползователь хочеть добавить 22,01,2007 эту дату в таблицу но в таблице есть такое запись чтоб ему сообщения была что есть такое запись итд Если нет то добавит
Как это делается хотябы пример покажите плз


 
Jan   (2007-03-30 10:54) [6]

уникальный индекс по полю + [1]


 
Ulugbek   (2007-03-30 11:00) [7]


> уникальный индекс по полю + [1]

Jan po podrobnee plz


 
Jan   (2007-03-30 11:04) [8]

какой пример, когда ты вопросы не оформил подобающе?
СУБД, как делаешь, код?


 
ЮЮ ©   (2007-03-30 11:04) [9]

Кроме dateTimepicker ещё что-нибудь имеется? чтобы узнать какая у тебя БД и что используешь для доступа?
Или код приведи по той кнопочке, что добавляет, ничего не спрашивая.

З.Ы. За конкретной помощью сюда следует обращаться с проблемным кодом. Просто поболтать можно в форуме "Прочее"


 
Ulugbek   (2007-03-30 11:07) [10]

Vot sobstvenno kod
procedure TRepPortL.btnresultClick(Sender: TObject);
begin
  if MessageDlg(" вы хотите формировать"""+DateToStr(DateS.Date)+"""по"""+DateToStr(DateP.Date)+"""",
 mtConfirmation, [mbYes, mbNo],0)=MrYes then
 begin
   Memo.Clear;
   Memo.Lines.Add("Начало...");
   LoadData(cdsForm,"select t.off_day from off_days t where t.day_status=1 and t.off_day between"""
   +Datetostr(DateS.Date)+""" and """+DateToStr(DateP.date)+"""");
   while not cdsForm.Eof do
     begin
     Memo.Lines.Add("Формирование за дату"+cdsform.fieldByname("off_day").AsString+"");
     ExecSQL("begin portld.PROC_INSERT(""" + cdsform.fieldbyname("off_day").AsString + """);end;");
     ExecSQL("commit");
     Memo.Lines.Add("Конец");
     cdsForm.Next;
   end;


 
Улугбек   (2007-03-30 11:10) [11]

База Оракл


 
Улугбек   (2007-03-30 11:31) [12]

Как мне решить эту задачу?


 
ЮЮ ©   (2007-03-30 11:36) [13]

Во первых, несколько непонятна логика.
cdsForm может вернуть несколько дат. Часть которых могут пройти, а часть повториться. Что ты намерен делать?
1) разрешать изменять по одной. столько раз, сколько эта ситуация возникнет.
2) что делать при отказе. Не вставлять ни одной или именно ту, что встретили

З.Ы. С Оракл не знаком, но насторащивает commit в цикле без старта тразакции

"хотите занова добавить или заменить итд"
реально можно "занова добавить"? Зачем тогда такой вопрос?
Что значит "или заменить?" Смысл что-то менять, если уже есть?


 
Улугбек   (2007-03-30 11:40) [14]


> "хотите занова добавить или заменить итд"реально можно "занова
> добавить"? Зачем тогда такой вопрос? Что значит "или заменить?
> " Смысл что-то менять, если уже есть?

Если уже есть запись то заменить
Я проста привел пример


 
Sergey13 ©   (2007-03-30 11:49) [15]

> [14] Улугбек   (30.03.07 11:40)

А Оракл какой? С 9-ки вроде merge into работает. Вроде как оно, хотя я с 9-ой и выше мало работал - сам не пользовался.


 
ЮЮ ©   (2007-03-30 12:08) [16]

>Я проста привел пример
Ну если это просто пример, то, например, можно сделать так:

procedure TRepPortL.btnresultClick(Sender: TObject);
var
 isDone: boolean;
begin
 if MessageDlg(" вы хотите формировать"""+DateToStr(DateS.Date)+"""по"""+DateToStr(DateP.Date)+"""",
mtConfirmation, [mbYes, mbNo],0)=MrYes then
begin
  Memo.Clear;
  Memo.Lines.Add("Начало...");
  LoadData(cdsForm,"select t.off_day from off_days t where t.day_status=1 and t.off_day between"""
  +Datetostr(DateS.Date)+""" and """+DateToStr(DateP.date)+"""");
  ExecSQL("begin trans"); // или как там у вас в Оракле
  isDone := false;
  while not cdsForm.Eof do
  begin
    Memo.Lines.Add("Формирование за дату"+cdsform.fieldByname("off_day").AsString+"");
    isDone := false;
    while not isDone do begin
      // пока не вставим, не уймемся
      try
        ExecSQL("begin portld.PROC_INSERT(""" + cdsform.fieldbyname("off_day").AsString + """);end;");
        isDone := true;
      except
        // вставить не удалось
        if
          MessageDlg(" хотите занова добавить или заменить итд,
            mtConfirmation, [mbYes, mbNo],0
          )=MrYes
        then begin
          try
            ExecSQL("begin portld.PROC_UPDATE(""" + cdsform.fieldbyname("off_day").AsString + """);end;");
            isDone := true;
          except
            // а что делать если PROC_UPDATE не прошел? Будем пытаться вставить
          end;
        end
        else
          break; // пользователь отказался от попыток вставить
      end;
      if not isDone then break; // если отказался хоть раз прерываем всю цепочку
    end;
    cdsForm.Next;
  end;
  if isDone then
    ExecSQL("commit")
  else
   ExecSQL("rollback");
  Memo.Lines.Add("Конец");
end;



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2007.06.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.04 c
3-1175235625
Ulugbek
2007-03-30 10:20
2007.06.24
Как проверить таблицу на запись


8-1160027808
DevilDevil
2006-10-05 09:56
2007.06.24
TBitmap и Альфаканал


11-1162641928
KBAHT
2006-11-04 15:05
2007.06.24
KOL+KOLXPMan & RichEdit


15-1180269906
DillerXX
2007-05-27 16:45
2007.06.24
Курсовой


8-1161003706
zorik
2006-10-16 17:01
2007.06.24
каким способом можно быстро узнать разрешение файлов jpg и bmp?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский