![]() |
|
|
![]()
|
|
| RuthlessD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 16.6.2011 Репутация: нет Всего: нет |
Доброе время суток, подскажите пожалуйста как можно выполнить задачу -
имеются 2 таблицы, в первой таблице 1 поле - специальность, оно же и ключевое. Во второй таблице поля специальность и дисциплина(дисциплина ключевое). Вопрос состоит в том, как сделать возможным изменение специальности в первой таблице, с последующими заменами этих же специальностей на новое значение, во второй таблице. Добавлено через 1 час 2 минуты Вот код того как я изменяю изменяю данные в первой таблице: Жму на форме кнопку изменения данных. procedure TForm12.Button2Click(Sender: TObject); begin Form13.show; Adotable1.Edit; end; это кнопка на другой форме, с помощью которых я изменяю на введенные значение в dbedit procedure TForm13.Button1Click(Sender: TObject); begin if dbedit1.text='' then begin messagebox(0,'Введите специальность!','Внимание',MB_OK); Abort; end else form12.adotable1.post; Form13.Close; end; |
|||
|
||||
| Akella |
|
|||
![]() Творец ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 18485 Регистрация: 14.5.2003 Где: Корусант Репутация: 29 Всего: 329 |
Наверное скоро откроем специальный раздел в Delphi для студентов
|
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
Если каждая специальность имеет своё значение ключа, то заменить запросом - с условием WHERE - не составит труда.
-------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| RuthlessD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 16.6.2011 Репутация: нет Всего: нет |
Я не использую ADOQuery...
|
|||
|
||||
| 14SatanA88 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 13.5.2010 Репутация: 1 Всего: 5 |
||||
|
||||
| RuthlessD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 16.6.2011 Репутация: нет Всего: нет |
14SatanA88, Я только учусь, название форм я не менял потому что мне так реально удобно, я знаю что где есть, хоть и не красиво.
А насчет фора, я даже не представляю как это сделать. У меня была чуть другая мысль: изменяя какую либо специальность, в первую переменную записывалось бы изменяемое значение, а во вторую то на что изменили. Потом в другой таблице через локейт(locate) сделать сортировку по первой переменной и заменить на значение из 2й переменной. Но как это организовать хоть убейте не знаю, не могу.... |
|||
|
||||
| 14SatanA88 |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 13.5.2010 Репутация: 1 Всего: 5 |
я сам недавно только колледж окончил
рекомендую менять название компонентов (и форм в частности) на свои. это реально удобней. сам прошел этот этап.
вообще locate - это поиск ну сделай замену так
if (adotable1.fieldbyname('spec').asstring=old_spec) then adotable1.fieldbyname('spec').asstring:=new_spec; здесь у тебя будет: spec - имя поля, где специальность old_spec - строковая переменная, где ты запишешь старую специальность new_spec - строковая переменная, где новая специальность а вообще sql-ем лучше. но я в нем не шарю практически |
||||||||
|
|||||||||
| chip_and_dayl |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 603 Регистрация: 22.4.2007 Где: Украина, Киев Репутация: 2 Всего: 9 |
Организовать правильно структуру базы и тогда такого извращения не будет. + знание СКЛ запросов не помешало бы Добавлено через 3 минуты и 21 секунду НО если уже пошли извращаться, то лучше сделать обновление через запрос, иначе если будет записей свыше 1 000, то будет не гуд. Запрос типа
-------------------- Фсё будет хорошо!!! |
|||
|
||||
| RuthlessD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 16.6.2011 Репутация: нет Всего: нет |
14SatanA88, Появляется ошибка, когда я жму на кнопку изменить ...... raised exception class EDatabaseError with message 'ADOTable2: Dataset not in edit or insert mode'.
Вот кнопка зименить. procedure TForm13.Button1Click(Sender: TObject); var spec,newspec:string; I:integer; begin spec:=form12.ADOTable1.FieldByName('Specialnost').Value; if dbedit1.text='' then begin messagebox(0,'Введите специальность!','Внимание',MB_OK); Abort; end else newspec:=dbedit1.Text; form12.adotable1.post; form12.adotable2.edit; // разрешаем редактирование, иначе вылетит form12.adotable2.first; // таблицу в начало for i:=1 to form12.adotable2.recordcount do // от 1 (первая запись) до recordcoun (число записей вообще) begin if (form12.adotable2.fieldbyname('Specialnost').asstring=spec) then form12.adotable2.fieldbyname('Specialnost').asstring:=newspec; // проверка и замена form12.adotable2.post; // сохранить изменения записи form12.adotable2.next; // перейти к следующей Form13.Close; end; end; Эта кнопка находится на форме, которую открываю с помощью procedure TForm12.Button2Click(Sender: TObject); begin Form13.show; Adotable1.Edit; // Тут я в эдит 1й дататэйбл перевожу. end; chip_and_dayl, Да понимаю, но структуру уже поздно менять, мне этот проект надо доделывать.... В ADotable вроде же нельзя SQL пользоваться (? |
|||
|
||||
| Данкинг |
|
|||
![]() Yersinia pestis ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 8302 Регистрация: 7.11.2006 Где: მოსკოვი Репутация: 35 Всего: 130 |
Какой нафиг цикл, если запросом это будет наиболее быстро.
Добавлено через 1 минуту и 15 секунд
А, так это принцип такой, что ли? -------------------- There's nothing left but silent epitaphs. |
|||
|
||||
| 14SatanA88 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 13.5.2010 Репутация: 1 Всего: 5 |
значит ты пытаешься записать значение в таблицу, к которой доступ закрыт. пользуйся кнопкой "код", когда постишь код. на какой строке ошибка? Добавлено через 39 секунд плюсую. да и кода меньше |
|||
|
||||
| RuthlessD |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 16.6.2011 Репутация: нет Всего: нет |
На какой строке не пишиь, жму Break, экран показывает просто весь код, нигде ничего не выделяя, а программа продолжает работать.
Может я дурачек и не правильно определяю старое значение
Это сообщение отредактировал(а) RuthlessD - 17.6.2011, 09:54 |
||||
|
|||||
| 14SatanA88 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 13.5.2010 Репутация: 1 Всего: 5 |
ну попробуй строку 9 перенести в начало процедуры.
тогда другой тип еррора был бы. тут именно попытка изменения данных таблицы, доступ к которой не открыт Это сообщение отредактировал(а) 14SatanA88 - 17.6.2011, 09:59 |
||||
|
|||||
| RuthlessD |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 16.6.2011 Репутация: нет Всего: нет |
Не помогло, я даже при нажатии на кнопку - вызове формы с кнопкой изменения, добавил кол Adotable2.edit...
|
|||
|
||||
| 14SatanA88 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 393 Регистрация: 13.5.2010 Репутация: 1 Всего: 5 |
ну тогда надо отслеживать где ошибка
прицепи исходник, я посмотрю Это сообщение отредактировал(а) 14SatanA88 - 17.6.2011, 10:04 |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |