powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / нерабочий кот, в чём моя ошибка
4 сообщений из 4, страница 1 из 1
нерабочий кот, в чём моя ошибка
    #36465419
Resager
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Значит такую задачю я пытался выполнить:

Есть 2 таблицы (DBF), в каждой из них есть столбец NKART, в каждое поле этого столбца уникально, ибо следующее соответствуеит ФИО соответствуюшего NKART(NKART - номер карточки), а во второй это поле не уникально, потому что например человек, номер карточки такой-то может несколько раз попадать в больницу, так вот каждая запись соответствует попаданию этого человека в больницу (а это может быть несколько раз, утрировано <=4), так вот пытаюсь я действовать по следующему алгоритму:

Считываем NKART из обоих таблиц, из записи1, затем сравниваем, равны ли они, если равноы, то берём все поля из 1-й таблицы и 1-но поле из 2-й таблицы (SOPU) и записываем в 3-ю таблицу (которая пока не существует (до начала выполнения программы)), [и затем, если встречается первый раз, пишем из 2-й таблицы столбца SOPU в 3-ю таблицу, в поле SOPU1, если встречается 2-й раз... то в поле SOPU2 и так до 4-х, номер повторения хранится в поле NOS], не считая того, что в квадратных скобках, я пытался сделать это так:
STATSOPU - таблица2, STATOPER - таблица1
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CLOSE DATABASES
CLEAR
CREATE DATABASE sopp

SELECT y.NKART, x.NOS, x.SOPU ;
   FROM STATSOPU x, STATOPER y ;
   WHERE (x.NKART = y.NKART) and (x.NOS = '1') ;
   INTO TABLE OBS.dbf ;

SET SAFETY OFF && Suppress verification message.
CLOSE DATABASES
CLOSE TABLES 

На языке, например С++ это выглядело бы очень прозрачно, так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
For (i= 0 ,i<fieldnams1, i++) // fieldnams - это количество записей в таблице1
{
  For (j= 0 ,j<fieldnams2, j++)
  {
     if table1.NKART[i]==table2.NKART[j]
     {
        writeTOtable(table3FILE,table3.NKART[i], table1.NKART[i]);   // Здесь функция(Имяфайла,имя_записываемого_поля, имя_поля_с_которого_читается_значение_взаписываемое_поле), и ещё я здесь не предусматриваю, то что в скобке (поэтому количество полей взятых из  2 -й таблицы будет не больше чем в первой (т.к. записываемое поле имеет индекс внешнего цикла table3.NKART[i]  )).
       .....  // Записываю все остальные поля таблицы1 в таблицу3
       writeTOtable(table3FILE,table3.SOPU[i], table2.SOPU[i]);
     }
  }
}
// Здесь i - номер обрабатываемого поля из таблицы1, j - таблицы2

Можете мне подсказать, почему не выполняется мой кусок кода (пишу в фоксе 6, однако версия думаю не особо играет роль), вообще в выходной таблице OBS.dbf не понятно по какой логике собирались значения...
...
Рейтинг: 0 / 0
нерабочий кот, в чём моя ошибка
    #36465446
Resager,
Вы не указали тип пооля NKART. Если символьный и там стоИт в одной таблице что-то вроде 123, то из второй к ней могут подвязаться 1, 12 и 123.
...
Рейтинг: 0 / 0
нерабочий кот, в чём моя ошибка
    #36466001
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Как узнать какая запись первая, какая вторая,.... четвертая - какой признак,

2. То, что Вы хотите получить придётся реализовать через UDF
...
Рейтинг: 0 / 0
нерабочий кот, в чём моя ошибка
    #36466811
igorbik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Resager,

Толпа лисоводов, обитающих в этой ветке сайта, решит эту проблему быстро, если будут выполнены некоторые условия:

1. Разбираться будем не с коТом, а с коДом - это я к тому, что в тексте сообщения столько ошибок и опечаток, что разобраться очень тяжело. Нужно проверять все перед отсылкой. Иначе это пренебрежение к русскому языку отражается на отношении лисоводов к автору (это закон психологии, к сожалению...).

2. Не поставлена задача: что же нужно получить в итоге. Возможно, это достаточно сложно напсать. Тогда (и здесь это неоднократно используется) нужно просто нарисовать и содержимое обеих таблиц, и тот результат, который должен быть на выходе (таблицу3) - именно нарисовать наглядно.

3. Возможно, нужно привести код функции writeTOtable и всех подфункций

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

После этого, возможно, еще будут вопросы, но понимание задачи резко упростится.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / нерабочий кот, в чём моя ошибка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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