Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / SQLQuery редактирование / 6 сообщений из 6, страница 1 из 1
15.08.2018, 16:00
    #39688242
ProstoChel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLQuery редактирование
делаем выборку
Код: pascal
1.
2.
3.
4.
  SQLQuery1.Close;
  SQLQuery1.SQL.Clear;
  SQLQuery1.SQL.Add('SELECT * FROM '......);
  SQLQuery1.Open;


редактируем записи
Код: pascal
1.
2.
3.
4.
5.
6.
  if (SQLQuery1.RecordCount > 0) then
  begin
    SQLQuery1.First;
    SQLQuery1.SQL.Add('UPDATE '........);
    SQLQuery1.ExecSQL;
  end;


Можно как то по другому?
видел где то
Код: pascal
1.
2.
3.
4.
5.
6.
7.
  if (SQLQuery1.RecordCount > 0) then
  begin
    SQLQuery1.First;
    SQLQuery1.Edit;
    SQLQuery1.FieldByName('Имя').AsInteger :=  Name;
    SQLQuery1.Post;
  end;


Но у меня вылетает ошибка: нельзя редактировать, read-only
...
Рейтинг: 0 / 0
15.08.2018, 16:24
    #39688262
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLQuery редактирование
ProstoChel
Код: pascal
1.
SQLQuery1


Это что?
...
Рейтинг: 0 / 0
15.08.2018, 17:26
    #39688301
kdv
kdv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLQuery редактирование
ProstoChel,

ProstoChelредактируем записи

if (SQLQuery1.RecordCount > 0) then
begin
SQLQuery1.First;
SQLQuery1.SQL.Add('UPDATE '........);
SQLQuery1.ExecSQL;
end;


Ужас какой. Во-первых, зачем тут First. Во-вторых, если SQLQuery1 использован для выборки, то SQL.Add ДОБАВИТ строку запроса к тому, что уже есть в свойстве SQL, и там получится каша из select ... update, которую сервер скорее всего не выполнит.

ProstoChelМожно как то по другому?
видел где то

if (SQLQuery1.RecordCount > 0) then
begin
SQLQuery1.First;
SQLQuery1.Edit;
опять же, при чем тут First? Вы только первую запись редактировать собрались? А SQLQuery1.Edit сработает только в том случае, если где-то или явно задан оператор update для редактирования текущей записи, или сами компоненты (или драйвер) умеют такой Update генерировать автоматически (при существенно ограниченном варианте исходного select).
...
Рейтинг: 0 / 0
16.08.2018, 12:50
    #39688748
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLQuery редактирование
ProstoChelвидел где то
Код: pascal
1.
2.
3.
4.
  if (SQLQuery1.RecordCount > 0) then
  begin
    SQLQuery1.First;
    SQLQuery1.Edit;



Это вы путаете SQL-запросы и ISAM-таблицы

таблицы КАЖУТСЯ нагляднее
но их работа принципиально ДРУГАЯ чем у SQL

да, есть компоненты, которые пытаются создать ИЛЛЮЗИЮ таблиц поверх SQL, например для ваших dbExpress - это может быть TSimpleDataSet поверх TClientDataSet, TProviderXXX. Или в составе ibExpress есть TIBQuery и TIBTable.

но цена за это - от тормозов до внезапно возникающих ошибок, когда программа ведёт себя не так, как ожидается, а чтобы эту ошибку поймать - нужно всё-таки заставить себя разобраться уже не только в сути SQL но и вдобавок к тому ещё какими конкретно способами создаётся иллюзия (и почему в вашем случае она создалась неправильно).

Много лет назад свою первую коммерческую программу еще на Interbase 5.6 и BDE я именно так и писал, на TTable. Написал половину - и потом второпях по ночам переделывал. Да, было удобно и просто, но программа себя стала вести непредсказуемо. В унаследованной программе сейчас есть блок настроек, с тем самым SQLQuery и TSimpleDataset - и там ещё типовые для ISAM-таблиц отношения Master-Detail. И конечно же никаких транзакций. В итоге это много-вкладочное окно начало само себя подвешивать. И я неделю отслеживал и расшивал разные варианты действий пользователя, чтобы разобраться и расшить эти само-блокировки.

Но лучше бы вам мне не поверить и всё-таки попытаться по-простому, по-табличному. Когда ваша программа у вас на глазах перестанет быть понимаемой и управляемой - этот опыт стоит того

Есть такой автор, П. В. Шумаков, и у него две версии книги о разработке программ с базами данных, для Delphi 3 и Delphi 5. Последняя например вот-тут упомянута: http://www.ibase.ru/articles/
ОЧЕНЬ рекомендую найти и прочитать, по крайней мере версию c Delphi 3 (надеюсь, что версию для Delphi 5 он не испортил, но ясам не читал).
Наплевать, что там все версия программ старые и компоненты, это совершенно не важно. Вам нужен букварь по азам и "прочистка мозга", понимание самых основ, пока не испортили программу "от оснований". Поймете основы - библитеки по вкусу сами подберёте.
И как вводный курс та книжка про Delphi 3 была просто шикарна, бессмернтая IMHO.
...
Рейтинг: 0 / 0
16.08.2018, 14:12
    #39688860
ProstoChel
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLQuery редактирование
В интернете нашёл одно решение:
ClientDataSet1-DataSetProvider1-SQLQuery1
Будет как то там

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
  SQLQuery1.Close;
  SQLQuery1.SQL.Text := 'SELECT * FROM ' + TableName2;
  SQLQuery1.Open;

  ClientDataSet1.Insert;
  ClientDataSet1.FieldByName('id').Value := 0;
  ClientDataSet1.FieldByName('Фамилия').AsString := 'Сумин';
  ClientDataSet1.FieldByName('Имя').AsString := 'Артём';
  ClientDataSet1.FieldByName('Отчество').AsString := 'Александрович';
  ClientDataSet1.Post;
  ClientDataSet1.ApplyUpdates(0);
...
Рейтинг: 0 / 0
16.08.2018, 15:12
    #39688926
Arioch
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQLQuery редактирование
ProstoChel,

да-да, именно про это я и писал, потом у тебя будет пара десятков таблиц с автоматическими зависимостями между ними, потом ты начнёшь при закрытии окна настроек им всем сразу ApplyUpdate делать....

кстати, в твоем коде они не применили изменения, а только зарегистрировали, что хотят их применить.
потому что ещё с транзакциями надо работать

"там обрыв. Мост рухнул. Но Вам туда можно" (с)
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / SQLQuery редактирование / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]