Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > TQuery не сохраняет запись


Автор: NiJazz 3.4.2004, 18:10
Я понимаю, что можно написать запрос, но...

Такой участок кода:

Код
with Query1 do begin
  Append;
  FieldByName('OrgName').AsString := edOrgName.Text;
  FieldByName('HeadF').AsString := edHeadF.Text;
  Post;
end;

Записи в таблице не появляется, хотя событие AfterPost точно срабатывает. В чём может быть дело?

Автор: NiJazz 4.4.2004, 08:51
Может, в каких свойствах дело?
Помогите, не запросы же писать!!!

Автор: remax 4.4.2004, 15:03
Query должен содержать "живой" запрос. т.е. в запросе должны быть задействованы все обязательные поля и причем одной таблицы! Тогда, быть может, что то получится. Но лучше, написать соответствующий запрос на добавление новой записи.

Автор: <Spawn> 4.4.2004, 15:27
Давно с Query Не работал, но перове что приходит в голову - ты Commit делаешь?

Автор: NiJazz 5.4.2004, 07:46
[/quote]ты Commit делаешь? [quote]
А что это?

Автор: Maverick 5.4.2004, 08:34
Цитата
ты Commit делаешь?
Цитата

А что это?


В InterBase - подтверждение выполненных изменений.... Типа Post только на уровне СУБД...

Цитата
Код
with Query1 do begin
  Append;
  FieldByName('OrgName').AsString := edOrgName.Text;
  FieldByName('HeadF').AsString := edHeadF.Text;
  Post;
end;


Я могу ошибаться, но где-то здесь должно фигурировать свойство поля Value.... Не могу счас проверить, но вот так примерно...

FieldByName('OrgName').VALUE.AsString := edOrgName.Text;

Автор: Serggggg 5.4.2004, 09:54
remax абсолютно прав! Если добавляешь запись, то заполнены должны быть ВСЕ поля запроса, на которые установлен Constraint (т.е. проверка на ненулевое значение). Это касается и всяких-разных ID, которые входят в таблицу. Запрос, опять же, будет работать только с параметром RequestLive=True и только в том случае, если он выбирает данные ои ОДНОЙ таблицы.

Автор: Akella 5.4.2004, 10:55
А как же RequestLive? Должно быть в True;

Запрос должень быть простым, выборка из двух таблиц не допускается.

А почему ты не пользуешься компонентой TTable. Мне кажеться, что сним работать легче.

Автор: Serggggg 5.4.2004, 12:45
dsergey, ИМХО TTable кушает побольше ресурсов. К тому же Query дает более гибкие возможности для выбора данных. Опять же - ИМХО. Я, например, пользуюсь TTable только тогда, когда не могу управиться одним запросом.

Автор: Akella 7.4.2004, 08:22
У меня есть база телефонов на 650 тысяч записей. Запуск приложения с TQuery происходит около 10 мин и сразу видно как память и процессор нагружаются, а с TTable - почти моментально и фильтрация работает быстрее, и нет проблем с памятью и процессором. (Paradox+BDE, WinXP, Cel1700, RAM256).
Интересно, а если создать алиас, то быстрее будет или нет. (а так все работает через DB.Params.Add('c:\Phone\Data\...'))

Автор: Serggggg 7.4.2004, 10:35
dsergey, а почему не через Alias? У меня БД на Oracle! Просто, когда становится вопрос об использовании нескольких Grid'ов на одной форме, например, то я спасаюсь только запросами! Хотя... Как кому удобно...
А вот Alias попробуй прописать - авось увеличит быстродействие.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)