![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Модификация данных [D7, MySQL]
*Ray* © (2007-01-23 20:00:00)Удалено модератором
Примечание: СПАМ
*Ray* (2007-01-26 20:55:00) [1]to Рустем:
> Вопрос: Query - это TADOQuery?
нет, использую MyQuery (MyDAC)
> Запрос обращается к одной таблице или к нескольким?
Выборка идет из одной таблицы
> когда, по моему, так будет правильней:
Да, спасибо, так выглядит элегантнее!
Возник вопрос по коду:
В приведенном Вами коде, присутствует Open, однако до этого мне сказали:
Sergey13:
> DataModule1.MyTable1.Open;
Зачем? Ты же уже "установил" указатель на нужную запись в уже, как я понял, открытом датасете. После переоткрытия указатель встает на первую запись.
Как будет правильнее использовать Open или нет?
Рустем (2007-01-25 20:33:00) [2]
> *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;
Sergey13 (2007-01-24 11:19:00) [3]> И сразу вопрос: а если мы успешно установили, Locate вернул
> true, то может ли в моем первоначальном коде (без транзакций)
> указатель изменить свое место в результате работы другог
> Клиента?
Нет.
*Ray* (2007-01-24 11:10:00) [4]
> Sergey13 © (24.01.07 08:54) [20]
> > DataModule1.MyTable1.Locate('ID_Zayavki',ID_Zayavki,[]);
>
> > //устанавливаю указатель в таблице заявок на нужную заявку
>
> Устанавливаешь. Но установилость ли, не проверяешь. Locate
> - это функция, возвращающая признак успешности выполнения.
Согласен, не учел что некоторые заявки могут быть не найдены. исправим. И сразу вопрос: а если мы успешно установили, Locate вернул true, то может ли в моем первоначальном коде (без транзакций) указатель изменить свое место в результате работы другог Клиента?
> > DataModule1.MyTable1.Open;
> Зачем? Ты же уже "установил" указатель на нужную запись
> в уже, как я понял, открытом датасете. После переоткрытия
> указатель встает на первую запись.
Спасибо за 2 дельных замечания!
*Ray* (2007-01-24 11:04:00) [5]
> Видать ИД разные а все остально одинаковое…
Kolan, абсолютно прав.
Я вот и подумал, что это связано с перемещением указателя. И внесенные изменения затирают данные другой заявки.
Sergey13 (2007-01-24 08:54:00) [6]> [10] *Ray* © (23.01.07 21:43)
> DataModule1.MyTable1.Locate('ID_Zayavki',ID_Zayavki,[]);
> //устанавливаю указатель в таблице заявок на нужную заявку
Устанавливаешь. Но установилость ли, не проверяешь. Locate - это функция, возвращающая признак успешности выполнения.
> DataModule1.MyTable1.Open;
Зачем? Ты же уже"установил" указатель на нужную запись в уже, как я понял, открытом датасете. После переоткрытия указатель встает на первую запись.
Kolan (2007-01-23 22:07:00) [7]«некоторые заявки стали дублироваться.?»
Видать ИД разные а все остально одинаковое
Johnmen (2007-01-23 22:06:00) [8]
> *Ray* © (23.01.07 22:02) [16]
Тогда как понимать "некоторые заявки стали дублироваться."?
Johnmen (2007-01-23 22:04:00) [9]А-а-а...
Мой опыт показывает, что ни в одной из наиболее известных.
Ну а о поддержании этой "основы реляц. БД" должен позаботиться разработчик БД.
*Ray* (2007-01-23 22:02:00) [10]2 Johnmen © :
> наличие уникальных индексов
у меня у каждой записи есть уникальный ID, к котрым я и обращаюсь, я не прав?
Kolan (2007-01-23 21:51:00) [11]В MSSQL так я пологал. Это же как бы основа реляц. БД
Johnmen (2007-01-23 21:50:00) [12]
> Kolan © (23.01.07 21:47) [13]
> А что в MySql то что все кортежи должны быть уникальными не выполняется?
А где выполняется?
Kolan (2007-01-23 21:47:00) [13]«их не будет, если не будет самой возможности их существования,
т.е. наличие уникальных индексов.»
А что в MySql то что все кортежи должны быть уникальными не выполняется?
Johnmen (2007-01-23 21:46:00) [14]
> *Ray* © (23.01.07 21:43) [10]
Написана ерунда почти в каждой строчке.
Ты всё же почитай что-нибудь, книжку какую про программирование БД.
Johnmen (2007-01-23 21:44:00) [15]
> *Ray* © (23.01.07 21:00) [9]
Здесь не объяснять, а целую лекцию читать...
А коротко можно сказать про дубликаты - их не будет, если не будет самой возможности их существования, т.е. наличие уникальных индексов.
*Ray* (2007-01-23 21:43:00) [16]правильно ли будет если я сделаю так:
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;
*Ray* (2007-01-23 21:00:00) [17]
> Johnmen © (23.01.07 20:54) [7]
А можно хотя бы попробовать объяснить? или хотя бы ответить в каком направлении мне искать ответ?
> Про транзакции применительно к MySQL ты лучше тут не вещай.
почему именно в MySQL транзакции лучше не использовать?
Kolan (2007-01-23 20:56:00) [18]«Про транзакции применительно к MySQL ты лучше тут не вещай.»
Опочки прочел как MsSQL Незадача
Johnmen (2007-01-23 20:54:00) [19]
> Kolan ©
Про транзакции применительно к MySQL ты лучше тут не вещай.
> *Ray* © (23.01.07 20:10) [2]
> К моему стыду, начал использовать буквально на днях.
> Мне просто важно знать в этом ли была моя ошибка? и решится
> ли проблема использованием транзакций?
Твоя проблема в [0] никакого отношения к тр-ям не имеет. Но имеет прямое отношение к теории построения и функционирования баз данных. Т.е. ты не знаешь основ. А в этом случае мы говорим на разных языках...
*Ray* (2007-01-23 20:53:00) [20]Спасибо большое!