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

Вниз

Модификация данных   Найти похожие ветки 

 
*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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.52 MB
Время: 0.045 c
3-1163689786
DelphiLexx
2006-11-16 18:09
2007.02.11
TDBTreeView, перемещение элементов


15-1169183517
vasIzmax
2007-01-19 08:11
2007.02.11
Баян об антивирусах


15-1169438175
Slider007
2007-01-22 06:56
2007.02.11
С днем рождения ! 20 января


3-1163674006
*Ray*
2006-11-16 13:46
2007.02.11
надпись на DBLookUpComboBox


15-1169504142
IMHO
2007-01-23 01:15
2007.02.11
Зарегистрированный товарный знак





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский