Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.11.2011, 15:36   #1
AleksandrGolovnoi
Новичок
Джуниор
 
Регистрация: 17.11.2011
Сообщений: 2
По умолчанию Не могу сохранить данные(Бд клиент-сервер)

Всем доброго времени суток. Суть проблемы в следующем. Пушу клиент-серверное приложение на делфе. Опыта написания вообще нет, литературку почитал но возникают вопросы. У меня на приложении- сервере стоит компонент адоквэри (MainQuery) он связан соответственно с датасетпровайдером (DSPMain). Соответственно на клиенте есть компонент Клиентдатасэт (MainClientDS) который связан с DSPMain. В базе данных есть таблица Specialnost куда я хочу добавить данные. При активации формы добавления пишу следующий код:

procedure TSpecialnostForm.FormActivate(Sende r: TObject);
begin
{Настраиваю ClientDataSet}
MainForm.MainClientDS.Active := false; {Сначала выключаю}
SpecialnostDBGrid.DataSource := MainForm.MainDataSource; // Связываю Дбгрид формы добавления с датасорсом(который связан с Клиентдатасэт (MainClientDS))
MainForm.MainClientDS.CommandText:= 'Select* From Specialnost'; {Ввожу сикуэль запрос}
MainForm.MainClientDS.Active := true; {включаю}

{тут редактирую грид}
SpecialnostDBGrid.DataSource.DataSe t.FieldByName('Code').Visible := false; // скрываю ключевое поле
SpecialnostDBGrid.DataSource.DataSe t.FieldByName('Name').DisplayLabel := 'Специальность'; //переименовываю в гриде поле ласт наме на Фамилия...
SpecialnostDBGrid.DataSource.DataSe t.FieldByName('Name').DisplayWidth := 25; //ставлю ширину в 12 символов
end;

Далее для кнопки добавить пишу следующий код

procedure TSpecialnostForm.BitBtn1Click(Sende r: TObject);
begin
MainForm.MainClientDS.Insert; //вставляю запись в MainClientDS
SpecialnostDBGrid.SetFocus; //передаю фокус в грид
end;

А для кнопки сохранить пишу следующее:

procedure TSpecialnostForm.BitBtn3Click(Sende r: TObject);
begin
If MainForm.MainClientDS.Modified then // если были изменения
MainForm.MainClientDS.ApplyUpdates( 0); // сохраняю данны
end;

Как я понимаю после выполнения команды MainForm.MainClientDS.ApplyUpdates( 0); все изменения проделанные с Клиентдатосетом передадутся на провайдер… А вот как сохранить эти изменения в базе?! Помогите разобраться. Если я что-то делаю неправильно пожалуйста подскажите.
Ps: у компонента адоквэри (MainQuery) свойство сикуэль пусто, так как запросы отправляю с клиента. Да если кто знает хорошие книжки по данной технологии напишите. Читал Сорокин А.В. Delphi Разработка баз данных, Шкрыль А. - Разработка клиент-серверных приложений в Delphi – 200
AleksandrGolovnoi вне форума Ответить с цитированием
Старый 22.11.2011, 16:57   #2
AleksandrGolovnoi
Новичок
Джуниор
 
Регистрация: 17.11.2011
Сообщений: 2
По умолчанию

Все разобрался сам... У КлиентДатаСета есть свойство CommandText в которое можно забивать СикуЭль запросы... Но чтоб оно работало необходимо в провайдере в свойстве options выставить в true свойство poAllowCommandText. После этого по нажатию на кнопку сохранить просто формирую запрос 'INSERT INTO ИмяТаблицы (поле1,поле2,...,полеN) VALUES ('''+Значение поля1+''','''+Значение поля2+''',...,'''+Значение поляN+''')'. Все на данный вопрос больше не надо отвечать
AleksandrGolovnoi вне форума Ответить с цитированием
Старый 22.11.2011, 17:42   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Можно CommandText не пользоваться. SELECT помещать в Query.SQL на сервере приложений. После активизации ClientDataSet выбранные записи доступны на клиенте, кол-во их может быть и 0. Спокойно правим ClientDataSet и методом ApplyUpdates отправляем изменения на сервер приложений, который в свою очередь на SQL-сервер. Это удобней чем городить огород командами INSERT, UPDATE и DELETE. DataSetProvider сам их сгенерирует на сервере приложений и через Query передаст в СУБД
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как отправить видео захват(с веб-Кам.) Клиент->Сервер->Клиент RODNOC Мультимедиа в Delphi 17 03.10.2010 22:31
Не могу найти (БД+клиент\сервер) grom333 БД в Delphi 3 23.08.2010 17:41
сервер+клиент+клиент на телефон Razyiller Работа с сетью в Delphi 3 01.04.2010 20:10
Возможно-ли Клиент-серверное приложение типа Клиент(Pascal) а сервер(CGI)? Demol Работа с сетью в Delphi 1 21.04.2009 16:18