Непонятки с массивом (запись из таблицы БД в массив)

Модератор: Модераторы

Непонятки с массивом (запись из таблицы БД в массив)

Сообщение jenny » 04.08.2015 13:41:34

Всем доброго времени суток!

Хотелось бы получить запись из таблицы БД (клиент) в массив.
Цель перенести данные с таблицы клиент в таблицy клиент_товар, так чтобы не было повторного переноса одной и той же записи (для этого создала массив). Мой код не работает, подскажите пожалуйста (нoвичку :) ) что можно тут сделать
Последний раз редактировалось jenny 20.08.2015 23:35:39, всего редактировалось 1 раз.
jenny
новенький
 
Сообщения: 59
Зарегистрирован: 25.05.2015 22:45:27

Re: Непонятки с массивом (запись из таблицы БД в массив)

Сообщение sts » 04.08.2015 21:45:07

Код: Выделить всё
Myarray: Array of Integer;
  i:Integer;
  begin
    ADOQuery1.last;
    SetLength(DynArray,AD.....
Код: Выделить всё
    SetLength(Myarray,AD..... ???//
sts
постоялец
 
Сообщения: 406
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Непонятки с массивом (запись из таблицы БД в массив)

Сообщение kav » 04.08.2015 21:50:53

наверное проблемав этом
SetLength(DynArray,ADOQuery1.RecordCount);
...
MyArray[i] := ADOQuery1.FieldByName('w_id').AsInteger;
kav
незнакомец
 
Сообщения: 3
Зарегистрирован: 04.08.2015 21:38:28

Re: Непонятки с массивом (запись из таблицы БД в массив)

Сообщение jenny » 05.08.2015 10:39:30

:shock: Ой забыла переделать DynArray на MyArray. Но все равно ничего не выходит....
jenny
новенький
 
Сообщения: 59
Зарегистрирован: 25.05.2015 22:45:27

Re: Непонятки с массивом (запись из таблицы БД в массив)

Сообщение Снег Север » 05.08.2015 11:45:52

Не очень понятно, что именно не работает. Особенно по второй части - как там организованы циклы проверки. Кстати, если ваша база данных позволяет создавать временные таблицы, то намного эффективнее вытащить набор 'w_id' в такую таблицу, а не в паскалевский массив, и все проверки делать средствами SQL.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 2993
Зарегистрирован: 27.11.2007 16:14:47

Re: Непонятки с массивом (запись из таблицы БД в массив)

Сообщение java73 » 06.08.2015 19:43:43

Запустите для начала в режиме отладки и поставьте маркер остановки в начале этого кода. Вдруг на какой-то строке что-то произойдет)
java73
постоялец
 
Сообщения: 257
Зарегистрирован: 21.11.2013 09:08:10

Re: Непонятки с массивом (запись из таблицы БД в массив)

Сообщение v-t-l » 08.08.2015 10:25:07

jenny писал(а):Цель перенести данные с таблицы клиент в таблицy клиент_товар, так чтобы не было повторного переноса одной и той же записи

Если таблицы находятся в одной базе данных:
Код: Выделить всё
ADOQuery11.SQL.Text:=
'INSERT INTO klient_tovar (v_id) SELECT w_id FROM klienty WHERE w_id NOT IN (SELECT v_id FROM klient_tovar WHERE v_id IS NOT NULL);';
ADOQuery11.ExecSQL;

А может быть и ещё проще.

Добавлено спустя 7 часов 26 минут 17 секунд:
Кстати, при сравнении нескольких полей будет лучше слегка другой sql
Код: Выделить всё
INSERT INTO klient_tovar (v_id) SELECT w_id FROM klienty WHERE NOT EXISTS (SELECT v_id FROM klient_tovar WHERE klient_tovar.v_id = klienty.w_id);
v-t-l
энтузиаст
 
Сообщения: 727
Зарегистрирован: 13.05.2007 16:27:22
Откуда: Belarus

Re: Непонятки с массивом (запись из таблицы БД в массив)

Сообщение jenny » 11.08.2015 11:17:32

спасибо за ответ!!
А если я не все данные и а только опеределённые перенести хочу, скажем выбераю пару строк и переношу
Последний раз редактировалось jenny 20.08.2015 23:36:57, всего редактировалось 1 раз.
jenny
новенький
 
Сообщения: 59
Зарегистрирован: 25.05.2015 22:45:27

Re: Непонятки с массивом (запись из таблицы БД в массив)

Сообщение Vadim » 11.08.2015 11:34:49

jenny писал(а):А если я не все данные и а только опеределённые перенести хочу, скажем выбераю пару строк и переношу

В этом случае после WHERE (которое в SELECT) надо поставить условие, которое отберёт именно ту пару строк, которые Вам нужны.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Непонятки с массивом (запись из таблицы БД в массив)

Сообщение jenny » 11.08.2015 12:01:04

не могли бы пожалуста объяcнить на примере, я в этом еще плохо разбираюсь
jenny
новенький
 
Сообщения: 59
Зарегистрирован: 25.05.2015 22:45:27

Re: Непонятки с массивом (запись из таблицы БД в массив)

Сообщение Vadim » 11.08.2015 12:08:10

jenny
Тогда сначала расскажите, каким образом Вы точно узнаёте, что какая-то "пара строк" из исходной таблицы должна быть перемещена в другую таблицу?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Непонятки с массивом (запись из таблицы БД в массив)

Сообщение jenny » 11.08.2015 12:39:25

при нажатии кнопки, происходит перенос строк/строки. Как это с sql запросом сделать я не знаю.
Последний раз редактировалось jenny 20.08.2015 23:36:17, всего редактировалось 1 раз.
jenny
новенький
 
Сообщения: 59
Зарегистрирован: 25.05.2015 22:45:27

Re: Непонятки с массивом (запись из таблицы БД в массив)

Сообщение Vadim » 11.08.2015 12:43:10

jenny
Нет, Вы потом говорили про другое:
jenny писал(а):А если я не все данные и а только опеределённые перенести хочу, скажем выбераю пару строк и переношу

Здесь совершенно чётко написано, что эти строки Вы выбираете. По каким критериям?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Непонятки с массивом (запись из таблицы БД в массив)

Сообщение jenny » 12.08.2015 13:19:58

выбираю по ID
Последний раз редактировалось jenny 20.08.2015 23:36:35, всего редактировалось 1 раз.
jenny
новенький
 
Сообщения: 59
Зарегистрирован: 25.05.2015 22:45:27

Re: Непонятки с массивом (запись из таблицы БД в массив)

Сообщение Vadim » 12.08.2015 15:31:46

jenny писал(а):но запись все равно дублицируется

1. Это потому, что у Вас не установлен уникальный индекс по тем полям, которые не должны дублироваться своими значениями. ;-)
2.
jenny писал(а):WHERE NOT EXISTS (SELECT v_id FROM klient_tovar '+
' WHERE klient.w_id = klient_tovar.v_id

Вы пытаетесь искать по тем параметрам, которых нет. Поэтому результат отрицательный. Вы сначала потренируйтесь составлять запросы SELECT, который выдают Вам результат из второй таблицы отсутствующий в первой. Как только вы это получите, можете присоединять его к INSERT. Вот, например:
Код: Выделить всё
SELECT k.w_id FROM klient k WHERE NOT EXISTS (SELECT t.v_id FROM klient_tovar t WHERE t.v_id=k.w_id)

Важное условие: столбцы k.w_id и t.v_id имеют одно и то же назначение.
Здесь происходит выборка кодов клиентов из таблицы klient, которые отсутствуют в таблице klient_tovar. По аналогии Вы можете составить своё условие, с помощью которого производится выборка именно тех строк, которых нет в таблице, в которую Вы хотите их вставить.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

Рейтинг@Mail.ru