Форум: "Базы";
Текущий архив: 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