![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Я рештил настройки меню загружать и сохранять в базу данных(Paradox).
Насколько я понял для того, чтобы загрузить данные из БД нужно использовать DataSourse и Table(или Query, если надо взять часть данных), но я не могу понять как сохранить данные в БД. К примеру у меня есть DBCheckBox1. После компиляции и активизации формы в него автоматически идет закрузка того статуса, который был установлен в БД(False или True, соответственно cbUnchecked и cbChecked). Но как произвести сохранение изменение изменения статуса DBCheckBox1? Подскажите ПЛЗ для меня енто очень важно. |
|||
|
||||
| VoL |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 26.3.2002 Репутация: нет Всего: нет |
Вообще, сохранение должно производиться автоматически при переходе на другое поле: Table.Next
|
|||
|
||||
| VoL |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 26.3.2002 Репутация: нет Всего: нет |
Когда я делал с этим боксом, у меня вес работало... Правда я использовал dbase IV
|
|||
|
||||
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Дело в том, что когда я в активной форме нажимаю на ДБЧекБокс, то смены его статуса не происходит!!!
|
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Table1.post;
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| VoL |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 24 Регистрация: 26.3.2002 Репутация: нет Всего: нет |
А ты уверен, что там не стоит какого-либо запрета, типа ReadOnly?
|
|||
|
||||
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Уже исправил. Ошибка была в Active=False Но встала другая проблема: если делать так, как сказал Vit то появляется сообщение об ошибке(типа того, что "таблица находится не в режиме редактирования или вставки", хотя ReadOnly стоит в False). |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Так тебе надо проверять, и делать post только в случае режима Edit - т.е. если информация была изменена.
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
На счет Query:
Когда я делаю запрос в таблицу, которая имеет значение полей типа String, то все нормально загружает в DBGrid: Select Name FROM AdminBase Но если таким же способом пататься загрузить данные типа Boolean(поставить True на Active), то возникает Еррор:'Invalid use of keyword' В чем может быть дело? |
|||
|
||||
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Попробовал так, но се равно Еррор:
procedure TForm1.CheckBox1Click(Sender: TObject); begin if CheckBox1.State=cbChecked then begin with Table1 do begin Active:=True; Edit; FieldByName('Stet').AsBoolean:=True; Post; Active:=False; end; end else begin with Table1 do begin Active:=True; Open; Edit; FieldByName('Stet').AsBoolean:=false; Post; Active:=False; end; end; end; |
|||
|
||||
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
А все дело в том, что надо было кое-что подделать и запускать не из Делфи так как в ентом случае 2 приложения юзают БД и возникал еррор |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
Я что-то не понял ты используешь TDBCheckBox или TCheckBox?
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
И то и другое Я пробую разные варианты |
|||
|
||||
| Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: 48 Всего: 207 |
C TCheckBox этот код должен работать:
Только в таблице должна быть хотя бы одна запись, если таблица пустая то код работать не будет, так как тогда надо не редактировать а вставлять запись. -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
В своей проге я сделал так что, при регистрации нового пользователя данные записываются в БД, но потом при вводе пароля для входа под своим ником, вход происходит только после второго нажатия на кнопку:
{Связь с таблицей данных осуществляется на стадии OnCreate формы 2} ... AName:=Edit1.Text; //Записать имя из Едит.Текста1 APass:=Edit2.Text; //Записать пароль из Едит.Текста2 Table1.Open; //Открыть таблицу if PageControl1.ActivePage=TabSheet1 then //если превая страница открыта ... ... {код проверки на заполнение полей ввода данных с именем и пасом} ... if not Table1.IsEmpty then begin repeat if (AName=Table1.FieldByName('Name').AsString) and (APass=Table1.FieldByName('Pass').AsString) then //Если логин и пасс совпадают... begin Form1.label65.Caption:=AName; //на Форме 1 вывести имя Админа Close; //Закрыть Форму end until not Table1.FindNext; Table1.Close; end; регистрация нового пользователя осуществляется из формы 3: ... with Form2.Table1 do begin Open; Insert; FieldByName('Name').AsString:=Edit1.Text; FieldByName('Pass').AsString:=Edit2.Text; Post; end;{наверно надо запихнуть в try .. except} ... Из за чего же после регистрации нового юзера при вводе пароля в форме 2 он активизируется только после второго раза?(хотя в последующие разы с первого) |
|||
|
||||
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Мне пришла в голову идея, что возможно ето возникает из за того, что после вставки новых данных(Insert) они ставятся на первое место в таблице, а курсор видимо переходит во вторую строку, поетому возможно и возникает ета проблема. Можно как нить установить куроср в БД на первую строку? |
|||
|
||||
| Spawn |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Так и есть все дело в позиции курсора: стоило поставить First в нужное место и все стало Ок |
||||
|
|||||
| Fantasist |
|
|||
|
Лентяй ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1517 Регистрация: 24.3.2002 Репутация: нет Всего: 41 |
Честно говоря, Дельфийские таблицы мне не очень нравятся, ровно как и DBкомпоненты типа DBGrid и т. п. На мой взгляд, удобнее работать с Query через SQL. Чаще всего, все-таки, удобнее изменять значение в базе данных не сразу после клика на какой-нибудь CheckBox, а после смены активной записи(условно говоря). Тут ты и формируешь либо 'INSERT INTO', либо 'UPDTE' на данных своих контролов.
-------------------- Волны гасят ветер... |
|||
|
||||
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Я ни как не могу понять, в чем же ошибка занесения в БД новых данных:
... if not Table1.IsEmpty then begin repeat if (AName=Table1.FieldByName('Name').AsString) and (APass=Table1.FieldByName('Pass').AsString) then //Если логин и пасс совпадают... begin if (Form1.Label65.Caption<>'')and(Form1.Label65.Caption=AName) then begin Table1.Edit; {Редактировать запись} for j:=1 to 3 do {цикл Чекбоксов} begin if CheckBx[j].State=cbUnchecked then Table1.FieldByName(Field[j]).AsBoolean:=False {если чекбоксы отжаты тогда False в таблице} else Table1.FieldByName(Field[j]).AsBoolean:=True; {иначе True} end;{for do} Table1.Post; {Послать изменения} Table1.Close; Close; {Закрыть форму} end {if then} else {иначе} begin Form1.label65.Caption:=AName; //на Форме 1 вывести имя Админа Close; //Закрыть Форму end; end {тело repeat} until not Table1.FindNext; ... Во время входа нового пользователя(набора пароля и имени ) все нормально, но как только совпадает условие(соответственно выполняются действия в етом блоке): if (AName=Table1.FieldByName('Name').AsString) and (APass=Table1.FieldByName('Pass').AsString) then //Если логин и пасс совпадают... begin if (Form1.Label65.Caption<>'')and(Form1.Label65.Caption=AName) then то пишет еррор: "невозможно производить какие-либо действия с закрытой БД", хотя БД на стадии OnCreat входит в состояние Active:=True и в сомой программе ни где не закрывается. В чем может быть дело? |
|||
|
||||
| МММ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 18.6.2002 Репутация: нет Всего: 1 |
Пришли исходняки на мыло, можу посмотреть и сделать. Ты только скажи а как ты собираешься пароли то прятать, шифровать, если молжно любым вьювером твою базу открыть и пароли посмотреть!!! в чем смысл то?
|
|||
|
||||
| МММ |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 354 Регистрация: 18.6.2002 Репутация: нет Всего: 1 |
Орс !!! у тебя же база парадокс там можно пароль ставить, звиняюсь косячок!!
|
|||
|
||||
| Spawn |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 278 Регистрация: 3.6.2002 Репутация: нет Всего: нет |
Спасибо, но я уже нашел ошибку ... if CheckBx[j].State=cbUnchecked then Table1.FieldByName(Field[j]).AsBoolean:=False {если чекбоксы отжаты тогда False в таблице} else Table1.FieldByName(Field[j]).AsBoolean:=True; {иначе True} end;{for do} Table1.Post; {Послать изменения} Table1.Close; ... а затем шла проверка на конец записи в таблице, но так как она была уже закрыта, то это приводило к ошибке: ... until not Table1.FindNext; ... |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |