На главную Наши проекты:
Журнал   ·   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_
  
> Вопрос по Locate
    Помогите пожалуйста с задачей(я в этом совсем новичок). Для начала мой код:

    ExpandedWrap disabled
      if ADOQuery1.Locate('employee_id', Variant(ADOQuery2.FieldbyName('e_id').AsInteger), [loCaseInsensitive]) Then
        Showmessage('Запись уже существует')
      else
      begin
        ADOQuery1.insert;
        ADOQuery1.FieldByName('employee').AsString:=ADOQuery2.FieldByName('employee');
        ADOQuery1.Post;
      end;


    У меня происходит сначала проверка записи на дубликат, потом вставка записи.

    Все функционирует. Только проблема если я выбераю не одну а несколько записей, вставка все равно происходит не смотря на то что в некоторых из выбранных записей дубликат присутствует. Как это исправить, пожалуйста помогите очень надо (если можно без sql запроса)
    Сообщение отредактировано: raccoon -
      Цитата raccoon @
      Только проблема если я выбераю не одну а несколько записей

      ем....
      locate не умеет искать две строки.
      TDataSet не умеет иметь сразу несколько позиций (только одну (+ метки но это не всчет. и то наверное это в гриде метки))
        Как организован проход (цикл) по ADOQuery2?
          Цитата Bas @

          Цикл вообще никак не организован, об этом я даже не подумал :o мне казалось локейт вполне достаточно. Если честно я даже не имею представление как этот цикл сделать, не подскажите пожалуйста, очень важно?
            Цитата raccoon @
            Цикл вообще никак не организован, об этом я даже не подумал

            При множественном выборе как вы делаете перебор записей в ADOQuery2?
            Цитата raccoon @
            мне казалось локейт вполне достаточно.

            Цитата ViktorXP @
            locate не умеет искать две строки.


            Цитата raccoon @
            Если честно я даже не имею представление как этот цикл сделать, не подскажите пожалуйста, очень важно?

            Как то так.
            ExpandedWrap disabled
              if ADOTable1.Supports(coSeek) then begin
               with ADOTable1 do begin
                 Close;
                 IndexName := strIndex;
                 CursorLocation := clUseServer;
                 Open;
                 Seek (Edit1.Text, soFirstEQ);
                end;
                if ADOTable1.EOF then
                 ShowMessage ('Record value NOT found');
              end

            или так
            ExpandedWrap disabled
              while not ADOQuery2.EOF do  
              if ADOQuery1.Locate('employee_id', Variant(ADOQuery2.FieldbyName('e_id').AsInteger), [loCaseInsensitive]) Then
                Showmessage('Запись уже существует')
              else
              begin
                ADOQuery1.insert;
                ADOQuery1.FieldByName('employee').AsString:=ADOQuery2.FieldByName('employee');
                ADOQuery1.Post;
              end;
              .....
              извините но первый код совсем не понял, поэтому испробовал второй, но как то пошло все не так... Вместо, того чтобы проверять записи выбранные мной, проверяются все записи, и вставка происходит как то странно, у меня теперь в базе на 2000 записей больше чем прежде :o .
                Цитата raccoon @
                Вместо, того чтобы проверять записи выбранные мной,

                Где выбираете где храните выбранное?
                Цитата raccoon @
                вставка происходит как то странно, у меня теперь в базе на 2000 записей больше чем прежде

                Ошибка в 17-ой строке. Телепаты сейчас в отпуске.
                  Цитата Bas @

                  выбираю в dbgrid-e, храню в mysql. Использовал второй код, ошибка не знаю в чем, сделал запрос в mysql а там теперь более 2 тысяч записей, а было около 40, и именно те записи повторяются, которые я выбрал
                  Сообщение отредактировано: raccoon -
                    Цитата raccoon @
                    в mysql а там теперь более 2 тысяч записе

                    Что было в ADOQuery2?

                    Цитата raccoon @
                    выбираю в dbgrid-e, храню в mysql.

                    Тогда цикл (for) надо проводить по DBGrid.SelectedRows.Count
                      спасибо очень помогло!!!!
                      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                      0 пользователей:


                      Рейтинг@Mail.ru
                      [ Script execution time: 0,0541 ]   [ 16 queries used ]   [ Generated: 15.05.24, 02:01 GMT ]