Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 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]

Я не понимаю что конкретно ты делаешь :) но чтобы не опасаться того чего ты опасаешься все должно быть сделано в одной транзакции.
Те на SQL
BEGIN TRANSACTION
/*Вставляем все что надо, до Commit никто ничего не испортит.
Кроме того если произойдет ошибка, то все откатится назад.*/
COMMIT TRANSACTION


Как это с использованием компонент делать я незнаю &#133


 
*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&#133 Незадача


 
*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 так я пологал. Это же как бы основа реляц. БД&#133


 
*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]

«„некоторые заявки стали дублироваться.“?»

Видать ИД разные а все остально одинаковое&#133


 
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.53 MB
Время: 0.038 c
3-1164029298
Ольга
2006-11-20 16:28
2007.02.11
Ошибка I/O Error 103 при работе с базой данных Paradox


15-1169565460
Cerberus
2007-01-23 18:17
2007.02.11
Кто работал с Pascal Script от RemObjects


15-1169035618
Dmitriy_info
2007-01-17 15:06
2007.02.11
Как выводить французские символы


1-1166610505
ZubrZubr
2006-12-20 13:28
2007.02.11
Component под Component


15-1169045417
Hillbert
2007-01-17 17:50
2007.02.11
Оценка работы