На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! ПРАВИЛА РАЗДЕЛА · FAQ раздела Delphi
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Обязательно указание:
1) типа базы данных (Paradox/Oracle/Interbase и т.п.)
2) способа доступа к базе данных (ODBC/ADO/DAO/BDE и т.п.)
Например: Paradox/BDE, MS Access/ADO

Наиболее часто задаваемые вопросы:
Базы даных для начинающих. Первые шаги. Понятие о BDE.
Переход на клиент-сервер и начала ADO
Приёмы работы с BLOB (OLE/Memo) полями
Запросы и параметры или как избавиться от многих проблем. Проблемы с датами в запросах.
Нужели мне нужно устанавливать BDE? (или почему не работает программа на другом компьютере)
Модераторы: Bas, Rouse_
  
> Query, UpdateSQL и AutoInc
    Delphi 7.0 / Paradox 7
    Есть две таблицы:
    1) men
    m_id: autoinc
    m_name: alpha
    2) results
    r_manid: integer(lookup field - men.m_id)
    result_1: integer
    ...
    Есть Query1, который объединяет поля обоих таблиц, всё это отображается потом в DBGrid1.
    Необходимо, чтобы можно было просматривать, вставлять и удалять записи.
    Для всех выше описанных действий использую два TUpdateSQL - UpdateMen и UpdateResults.
    Query1.UpdateObject ничего не указываю, а делаю так:
    CODE
    procedure TFrom1.FormCreate(Sender: TObject);
    begin
    UpdateMen.DataSet := Query1;
    UpdateResults.DataSet := Query1;
    end;
    procedure TForm1.QueryUpdateRecord(DataSet: TDataSet;
    UpdateKind: TUpdateKind; var UpdateAction: TUpdateAction);
    begin
    UpdateMen.Apply(UpdateKind);
    UpdateResults.Apply(UpdateKind);
    UpdateAction := uaApplied;
    end;

    С просмотром и удаление проблем нет, а вот с вставкой есть!
    Понятно, что надо сначала вставлять запись в men, получать
    m_id и и только тогда вставлять запись в results. А вот его-то
    получить ну никак не удаётся.
    У поля есть св-во AutoGenerateValue - с ним тоже ничего не получается.
    В помощи сказано:
    QUOTE
    AutoGenerateValue can fail in some cases when the automatically-generated field value is on a key field.
    This is because the query that re-fetches the new field value can’t always uniquely locate the record that was just posted.

    Как я понял m_id не должно быть ключевым, но и это не помогает.
    Установка Query.AutoRefresh = true и даже программный Query.Refresh не помогают.
    Так что же разорвёт эту проблему в пух и прах???
    Всем заранее спасибо, т.к. я уже даже не могу представить способа
    это сделать sad.gif , кроме как работать с DataSet напрямую(AppendRecord(...), Post)
      я бы сделал одну таблицу и не парился .
      Номер новой записи ты сможещь узнать тока после вставки ...............
        Нельзя! Потому что у одного человека может быть несколько результатов.
        Так не повторяется лишняя личная информация о каждом человеке и сами результаты отслеживать эффективней, например из изменение во времени.
          При инициализации Database приватному полю FSQLBased TQuery
          (его значение можно получить функцией IsSQLBased) присваивается
          значение false, если название драйвера STANDART.
          Похоже, что св-во AutoGenerateValue поля работает только, если
          FSQLBased = true(стоит условие if isSQLBased then ), т.е. не для стандартного драйвера.
          Для св-ва Refresh Query также. Если хотите, посмотрите DBTables.pas
          0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0196 ]   [ 16 queries used ]   [ Generated: 25.04.24, 03:49 GMT ]