Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #16  
Старый 24.07.2019, 04:09
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Locate тебе в руки. Он позволяет найти нужную запись по ключу.
Ответить с цитированием
  #17  
Старый 24.07.2019, 09:58
Maks19 Maks19 вне форума
Начинающий
 
Регистрация: 19.06.2019
Сообщения: 113
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

А у меня в строчке 3 написано,что найти нужную запись. Или это не то?
Ответить с цитированием
  #18  
Старый 24.07.2019, 09:58
Maks19 Maks19 вне форума
Начинающий
 
Регистрация: 19.06.2019
Сообщения: 113
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

А у меня в строчке 3 написано,что найти нужную запись. Или это не то?
Ответить с цитированием
  #19  
Старый 24.07.2019, 11:45
Maks19 Maks19 вне форума
Начинающий
 
Регистрация: 19.06.2019
Сообщения: 113
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Locate тебе в руки. Он позволяет найти нужную запись по ключу.
Какой критерий задать? Если в таблице1, 2 или 3 (какой?) не найдено ,что?
Ответить с цитированием
  #20  
Старый 24.07.2019, 19:57
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну я не знаю, как ты их отличаешь друг от друга.
Один из ключей, как я понимаю, есть ссылка на главную таблицу (Table1). Это даст тебе твои 3 строчки для выбранной записи в главной таблице. Ну а как ты различаешь строчки между собой - смотри сам...

ЗЫ. Если уж совсем все плохо, то просто удали существующие строчки и вставь их заново.

ЗЗЫ. А вообще, что же вы за маньяки... ради 100 байт использовать БД... это ж бред... все прекрасно можно хранить в файлах, даже в одном... не та информация, что бы использовать БД.
Я тут недавно в какой-то теме уже даже приводил код для хранения подобной информации в файле.

Последний раз редактировалось lmikle, 24.07.2019 в 20:00.
Ответить с цитированием
  #21  
Старый 24.07.2019, 20:52
Maks19 Maks19 вне форума
Начинающий
 
Регистрация: 19.06.2019
Сообщения: 113
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Ну я не знаю, как ты их отличаешь друг от друга.
Можно еще разок о чем идет речь?

Цитата:
Сообщение от lmikle
Один из ключей, как я понимаю, есть ссылка на главную таблицу (Table1).
Это даст тебе твои 3 строчки для выбранной записи в главной таблице. Ну а как ты различаешь строчки между собой - смотри сам...
ЗЫ. Если уж совсем все плохо, то просто удали существующие строчки и вставь их заново.
Что за 3 строчки ?
Ответить с цитированием
  #22  
Старый 24.07.2019, 22:03
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Обычно в БД каждая запись (строка) имеет уникальный идентификатор - некоторое поле или комбинация полей, содержащее уникальное значение во всей таблице. Это нужно как раз для того, что бы при необходимости найти конкретную запись. Я не знаю структуру твоих таблиц, просто предполагаю, что одно из полей - это ссылка на главную таблицу. Это поле позволяет тебе отфильтровать записи, которые относятся к выбранной записи в главной таблице. Еще одно поле должно уникально определять запись в рамках первого поля. Вот по этой комбинации тебе и нужно искать записи для их редактирования.

2. Строчки в данном случае - записи в таблице.

ЗЫ. Ну прочти уже хоть одну книжку по проектированию реляционных баз данных. Я не могу, да и не хочу, тут постить целые лекции на эту теме. Основы надо выучить самому.
Ответить с цитированием
  #23  
Старый 24.07.2019, 23:30
Maks19 Maks19 вне форума
Начинающий
 
Регистрация: 19.06.2019
Сообщения: 113
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
1. Обычно в БД каждая запись (строка) имеет уникальный идентификатор - некоторое поле или комбинация полей, содержащее уникальное значение во всей таблице. Это нужно как раз для того, что бы при необходимости найти конкретную запись. Я не знаю структуру твоих таблиц, просто предполагаю, что одно из полей - это ссылка на главную таблицу. Это поле позволяет тебе отфильтровать записи, которые относятся к выбранной записи в главной таблице. Еще одно поле должно уникально определять запись в рамках первого поля. Вот по этой комбинации тебе и нужно искать записи для их редактирования.

2. Строчки в данном случае - записи в таблице.


У первой таблицы 2 поля, ключевое и где хранятся проекты, у второй Rid связь
с первой осуществляется по полю Isid, у третьей связь с первой осуществляется по полю Rezid. Я так понимаю, что надо искать по полям Isid и полю Rezid?
У всех трех таблиц есть ключевые поля.
Цитата:
Сообщение от lmikle
Это поле позволяет тебе отфильтровать записи, которые относятся к выбранной записи в главной таблице. Еще одно поле должно уникально определять запись в рамках первого поля. Вот по этой комбинации тебе и нужно искать записи для их редактирования.
А что задавать в Locate('Isid'; 'Rezid'; .......[])
KeyValues какой ? какой критерий поиска?
Ответить с цитированием
  #24  
Старый 25.07.2019, 00:36
Maks19 Maks19 вне форума
Начинающий
 
Регистрация: 19.06.2019
Сообщения: 113
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Maks19
А что задавать в Locate('Isid'; 'Rezid'; .......[])
KeyValues какой ? какой критерий поиска?
У первой (главной) ключевое поле ProjId.
Такой Locate?
Locate('Isid'; 'Rezid'; ProjId,[])
Ответить с цитированием
  #25  
Старый 25.07.2019, 01:50
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

http://docwiki.embarcadero.com/RADSt...n/Using_Locate
http://www.delphigroups.info/2/40/235067.html
там все написано, с примерами.
Ответить с цитированием
  #26  
Старый 27.07.2019, 16:00
Maks19 Maks19 вне форума
Начинающий
 
Регистрация: 19.06.2019
Сообщения: 113
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Не знаю правильно так записать условие?
Если во второй таблице ключ найден, то
Код:
if not Table2.Locate('Isid',Table1.FieldbyName('Projid').AsDtring,[]) then 

Ответить с цитированием
  #27  
Старый 28.07.2019, 15:35
Аватар для Guaho
Guaho Guaho вне форума
Начинающий
 
Регистрация: 27.08.2017
Сообщения: 173
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

А not зачем? С ним как раз будет "если запись не найдена". И AsString не нужно, AsInteger правильнее, т.к. код записи имеет тип Integer.
Ответить с цитированием
  #28  
Старый 29.07.2019, 23:16
Maks19 Maks19 вне форума
Начинающий
 
Регистрация: 19.06.2019
Сообщения: 113
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Guaho
А not зачем? С ним как раз будет "если запись не найдена". И AsString не нужно, AsInteger правильнее, т.к. код записи имеет тип Integer.
Я подразумевал, что если запись не найдена то добавить если найдена, то редактировать.
Код:
if  not Table2.Locate('Isid',Table1.FieldByName('Projid').AsInteger,[]) then
begin
        Table2.Insert;
        Table3.Insert;
        end
  else
  begin
     Table2.Edit;
    Table3.Edit;
    end;
 if Edit1.Text<>'' then Table2.FieldByName('Dmin').AsString:=Edit1.Text;
     .....
 Table2.Post;
for i:=0 to n  do
  begin
  Table3.FieldByName('Cy1').AsString:=floattostr(Cy1[i]);
....
end;
  Table3.Post;
Но в табл 3 записывается только последний элемент массива. Не подскажите почему не весь массив ?
Ответить с цитированием
  #29  
Старый 31.07.2019, 20:12
Maks19 Maks19 вне форума
Начинающий
 
Регистрация: 19.06.2019
Сообщения: 113
Версия Delphi: Delphi7
Репутация: 10
По умолчанию

Код:
if not Table2.Locate('Isid',Table1.FieldByName('Projid').AsInteger,[]) then
begin
for i:=0 to n do
begin
Table2.Insert;
Table3.FieldByName('Cy1').AsString:=floattostr(Cy1[i]);
.........
Table2.Post;
end;
end
else
begin
for i:=0 to n do
begin
Table2.Edit;
Table2.FieldByName('Cy1').AsString:=floattostr(Cy1[i]);
.........
Table2.Post;
end;
end;
Не подскажите как сделать чтобы менялись все шесть записей в поле ,а не только первый?
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:08.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter