Текущий архив: 2007.02.11;
Скачать: CL | DM;
ВнизМодификация данных Найти похожие ветки
← →
*Ray* © (2007-01-23 20:00) [0]Удалено модератором
Примечание: СПАМ
← →
Kolan © (2007-01-23 20:02) [1]Транзакция знаешь что такое?
← →
*Ray* © (2007-01-23 20:10) [2]
> Kolan © (23.01.07 20:02) [1]
> Транзакция знаешь что такое?
К моему стыду, начал использовать буквально на днях. Мне просто важно знать в этом ли была моя ошибка? и решится ли проблема использованием транзакций?
← →
Kolan © (2007-01-23 20:21) [3]Я не понимаю что конкретно ты делаешь :) но чтобы не опасаться того чего ты опасаешься все должно быть сделано в одной транзакции.
Те на SQLBEGIN TRANSACTION
/*Вставляем все что надо, до Commit никто ничего не испортит.
Кроме того если произойдет ошибка, то все откатится назад.*/
COMMIT TRANSACTION
Как это с использованием компонент делать я незнаю …
← →
*Ray* © (2007-01-23 20:39) [4]Как я понял, все что в теле транзакции исполняется одним блоком. А если 2 Клиента захотят изменить одну и ту же заявку? Что произойдет? Кто первый тот и изменит?
← →
Kolan © (2007-01-23 20:45) [5]«Как я понял, все что в теле транзакции исполняется одним
блоком.»
Транзакция — это или выполнено все до конца или вообще ничего.
«А если 2 Клиента захотят изменить одну и ту же заявку?»
Один из низх подождет. После вступления в силу изменений первого. Вступят измененения второго.
Тут я неуверен. Надо тебе прочесть про «блокировки» и вообще мат часть.
«Кто первый тот и изменит?»
Тут, скорее всего не угодаешь.
← →
*Ray* © (2007-01-23 20:53) [6]Спасибо большое!
← →
Johnmen © (2007-01-23 20:54) [7]
> Kolan ©
Про транзакции применительно к MySQL ты лучше тут не вещай.
> *Ray* © (23.01.07 20:10) [2]
> К моему стыду, начал использовать буквально на днях.
> Мне просто важно знать в этом ли была моя ошибка? и решится
> ли проблема использованием транзакций?
Твоя проблема в [0] никакого отношения к тр-ям не имеет. Но имеет прямое отношение к теории построения и функционирования баз данных. Т.е. ты не знаешь основ. А в этом случае мы говорим на разных языках...
← →
Kolan © (2007-01-23 20:56) [8]«Про транзакции применительно к MySQL ты лучше тут не вещай.»
Опочки прочел как MsSQL… Незадача
← →
*Ray* © (2007-01-23 21:00) [9]
> Johnmen © (23.01.07 20:54) [7]
А можно хотя бы попробовать объяснить? или хотя бы ответить в каком направлении мне искать ответ?
> Про транзакции применительно к MySQL ты лучше тут не вещай.
почему именно в MySQL транзакции лучше не использовать?
← →
*Ray* © (2007-01-23 21:43) [10]правильно ли будет если я сделаю так:
DataModule1.MyConnection1.StartTransaction;
try
ID_Zayavki:=Form1.DBGrid1.Fields[0].AsInteger; //По нажатию кнопки запоминаю ID заявки.
DataModule1.MyTable1.Locate("ID_Zayavki",ID_Zayavki,[]); //устанавливаю указатель в таблице заявок на нужную заявку
DataModule1.MyTable1.Open;
DataModule1.MyTable1.Edit;
//записываем введенную информацию
DataModule1.MyTable1.Fields.Fields[2].AsInteger:=Form3.DBLookupComboBox1.KeyValu e;
DataModule1.MyTable1.Fields.Fields[3].AsString:=Form3.Edit1.Text;
…………………………………………………………………………..
DataModule1.MyTable1.Post; // сохраняем изменения
Commit;
except
Rollback;
raise;
end;
← →
Johnmen © (2007-01-23 21:44) [11]
> *Ray* © (23.01.07 21:00) [9]
Здесь не объяснять, а целую лекцию читать...
А коротко можно сказать про дубликаты - их не будет, если не будет самой возможности их существования, т.е. наличие уникальных индексов.
← →
Johnmen © (2007-01-23 21:46) [12]
> *Ray* © (23.01.07 21:43) [10]
Написана ерунда почти в каждой строчке.
Ты всё же почитай что-нибудь, книжку какую про программирование БД.
← →
Kolan © (2007-01-23 21:47) [13]«их не будет, если не будет самой возможности их существования,
т.е. наличие уникальных индексов.»
А что в MySql то что все кортежи должны быть уникальными не выполняется?
← →
Johnmen © (2007-01-23 21:50) [14]
> Kolan © (23.01.07 21:47) [13]
> А что в MySql то что все кортежи должны быть уникальными не выполняется?
А где выполняется?
← →
Kolan © (2007-01-23 21:51) [15]В MSSQL так я пологал. Это же как бы основа реляц. БД…
← →
*Ray* © (2007-01-23 22:02) [16]2 Johnmen © :
> наличие уникальных индексов
у меня у каждой записи есть уникальный ID, к котрым я и обращаюсь, я не прав?
← →
Johnmen © (2007-01-23 22:04) [17]А-а-а...
Мой опыт показывает, что ни в одной из наиболее известных.
Ну а о поддержании этой "основы реляц. БД" должен позаботиться разработчик БД.
← →
Johnmen © (2007-01-23 22:06) [18]
> *Ray* © (23.01.07 22:02) [16]
Тогда как понимать "некоторые заявки стали дублироваться."?
← →
Kolan © (2007-01-23 22:07) [19]«„некоторые заявки стали дублироваться.“?»
Видать ИД разные а все остально одинаковое…
← →
Sergey13 © (2007-01-24 08:54) [20]> [10] *Ray* © (23.01.07 21:43)
> DataModule1.MyTable1.Locate("ID_Zayavki",ID_Zayavki,[]);
> //устанавливаю указатель в таблице заявок на нужную заявку
Устанавливаешь. Но установилость ли, не проверяешь. Locate - это функция, возвращающая признак успешности выполнения.
> DataModule1.MyTable1.Open;
Зачем? Ты же уже "установил" указатель на нужную запись в уже, как я понял, открытом датасете. После переоткрытия указатель встает на первую запись.
← →
*Ray* © (2007-01-24 11:04) [21]
> Видать ИД разные а все остально одинаковое…
Kolan, абсолютно прав.
Я вот и подумал, что это связано с перемещением указателя. И внесенные изменения затирают данные другой заявки.
← →
*Ray* © (2007-01-24 11:10) [22]
> Sergey13 © (24.01.07 08:54) [20]
> > DataModule1.MyTable1.Locate("ID_Zayavki",ID_Zayavki,[]);
>
> > //устанавливаю указатель в таблице заявок на нужную заявку
>
> Устанавливаешь. Но установилость ли, не проверяешь. Locate
> - это функция, возвращающая признак успешности выполнения.
Согласен, не учел что некоторые заявки могут быть не найдены. исправим. И сразу вопрос: а если мы успешно установили, Locate вернул true, то может ли в моем первоначальном коде (без транзакций) указатель изменить свое место в результате работы другог Клиента?
> > DataModule1.MyTable1.Open;
> Зачем? Ты же уже "установил" указатель на нужную запись
> в уже, как я понял, открытом датасете. После переоткрытия
> указатель встает на первую запись.
Спасибо за 2 дельных замечания!
← →
Sergey13 © (2007-01-24 11:19) [23]> И сразу вопрос: а если мы успешно установили, Locate вернул
> true, то может ли в моем первоначальном коде (без транзакций)
> указатель изменить свое место в результате работы другог
> Клиента?
Нет.
← →
Рустем © (2007-01-25 20:33) [24]
> *Ray* ©
> Есть DBGrid который отображает данные из Query
Вопрос: Query - это TADOQuery? Запрос обращается к одной таблице или к нескольким?
Кроме того, зачем так делать:
> ID_Zayavki:=Form1.DBGrid1.Fields[0].AsInteger;
>DataModule1.MyTable1.Locate("ID_Zayavki", ID_Zayavki, []);
когда, по моему, так будет правильней:
if DataModule1.MyTable1.Locate("ID_Zayavki", Query["ID_Zayavki"], []) then
with DataModule1.MyTable1 do
begin
Open;
Edit;
...
Post;
Close;
ну и, наверное, Query.Requery;
end;
← →
*Ray* © (2007-01-26 20:55) [25]to Рустем:
> Вопрос: Query - это TADOQuery?
нет, использую MyQuery (MyDAC)
> Запрос обращается к одной таблице или к нескольким?
Выборка идет из одной таблицы
> когда, по моему, так будет правильней:
Да, спасибо, так выглядит элегантнее!
Возник вопрос по коду:
В приведенном Вами коде, присутствует Open, однако до этого мне сказали:
Sergey13:
> DataModule1.MyTable1.Open;
Зачем? Ты же уже "установил" указатель на нужную запись в уже, как я понял, открытом датасете. После переоткрытия указатель встает на первую запись.
Как будет правильнее использовать Open или нет?
Страницы: 1 вся ветка
Текущий архив: 2007.02.11;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.043 c