powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Подскажите код по заполнению таблиц, пожалуйста
12 сообщений из 12, страница 1 из 1
Подскажите код по заполнению таблиц, пожалуйста
    #34548208
Н.С.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток.
Подскажите пожалуйста пример кода, который будет делать следующее:
По полю "Nomer" в dbf-таблице искать сначала строчку со значением "0" и записывать в таблицу на MSSQL значение полня "Name" той строки, где Nomer имеет значение ноль. А потом записать в курсор номер этой записи в таблице MSSQL, а потом записать все остальные значения поля "Name" из dbf-таблице.
Т.е. так:
Таблица dbf:
Nomer Name
0 Учебники
1 Химия
2 Физика
3 Геометрия
4 Черчение
5 Литература

А так должна выглядеть таблица в MSSQL После заполнения:
id_cls id_supper_cls cls_name
123 Null Учебники
124 123 Химия
125 123 Физика
126 123 Геометрия
127 123 Черчение
128 123 Литература
Нужно найти сначала родительскую запись под номером ноль в dbf-таблице и записать ее, потом с ее номером в качестве значения id_supper_cls записывать все остальные записи.

Помогите пожалуйста!
...
Рейтинг: 0 / 0
Подскажите код по заполнению таблиц, пожалуйста
    #34548440
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какую технологию работы с SQL Server вы используете? (CA, PT, RV)

С уважением, Алексей
...
Рейтинг: 0 / 0
Подскажите код по заполнению таблиц, пожалуйста
    #34548444
Н.С.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот, поясню сразу, а то забыла указать в первом посте:
id_cls - генерируется само при заполнении, а значение "123" я дала просто для наглядности.
Т.е. нужно закинуть из dbf-ки одну строчку, ей MSSQL даст сам значение id_cls, id_supper_cls будет нулл, а потом мы это значение считываем в курсор и дальше заполняем, где уже берем значение из курсора и для остальных записей присваиваем это значение в качестве id_supper_cls. Только как это программно сделать?
...
Рейтинг: 0 / 0
Подскажите код по заполнению таблиц, пожалуйста
    #34548454
Н.С.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Aleksey-K, извините, но я только начинаю этим заниматься и немного не разбираюсь в терминалогии.
Для соединения с сервером я пользуюсь таким кодом:
gnConnect=SQLSTRINGCONNECT("Driver=SQL Native Client;SERVER=название сервера;Trusted_Connection=NO;APP=Microsoft Visual FoxPro;UID=sa;PWD=пасс;")
...
Рейтинг: 0 / 0
Подскажите код по заполнению таблиц, пожалуйста
    #34548754
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А таблица на SQL севере уже есть ?
С уважением, Алексей
...
Рейтинг: 0 / 0
Подскажите код по заполнению таблиц, пожалуйста
    #34548783
Н.С.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, база есть, таблицы все есть (в том числе и та, про которую тут идет речь), только она не заполнена :)
...
Рейтинг: 0 / 0
Подскажите код по заполнению таблиц, пожалуйста
    #34548901
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда проще всего создать на сервере хранимую процедуру и вызывать ее в цикле с клиента с передачей ей полей dbf - файла. Если у вас не получится ее написать, то напишите - помогу.
С уважением, Алексей
...
Рейтинг: 0 / 0
Подскажите код по заполнению таблиц, пожалуйста
    #34548945
Н.С.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело в том, что уже некоторые таблицы из этой базы были заполнены с помощью создания курсоров и дальнейшего заполнения таблиц по ним. И дальнейшее заполнение крайне желательно было бы реализовать через курсор. Представляю я себе это так:
Сначала заполняем первую строчку в таблице на sql-сервере, потом id_cls этой строчки считываем в курсор созданный в фоксе, потом из этого курсора этим значением заполняем поле id_supper_cls в таблице на сервере для всех остальных значений при дальнейшем заполнении. Т.е. реализация как бы в два подхода. Но с кодом у меня проблемы, знаний не хватает :(

А что есть хранимая процедура?) извините, я не давно начала заниматься базами.
...
Рейтинг: 0 / 0
Подскажите код по заполнению таблиц, пожалуйста
    #34548963
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ваша таблица на сервере - это типичная иерархическая таблица с одним уровнем вложения.
Для исключения ошибок при добавлении, в правильном порядке добавлять записи, т.е. сначала "родителя", а потом его "детей".

С уважением, Алексей
...
Рейтинг: 0 / 0
Подскажите код по заполнению таблиц, пожалуйста
    #34549050
Н.С.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, да. Это я понимаю, что нужно сначала добавлять запись "родителя" (благо он в данном случае 1), а потом остальные записи. Только я не знаю как. Покажите пожалуйста пример кода.
...
Рейтинг: 0 / 0
Подскажите код по заполнению таблиц, пожалуйста
    #34550423
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну например так:
1. Клиентская сторона:
*-- T1 - ваша таблица
*-- Я в своих приложениях использую ODBC для работы с SQL Server (Driver=SQL Server)
*-- В примере использую вашу строку подключения к SQL серверу. Судя по всему у вас SQL 2005
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
FUNCTION Export
LOCAL gnConnect, lcCommand 
m.gnConnect=SQLSTRINGCONNECT("Driver=SQL Native Client;SERVER=название сервера;Trusted_Connection=NO;APP=Microsoft Visual FoxPro;UID=sa;PWD=пасс;")
IF m.gnConnect <=  0 
     MESSAGEBOX("Ошибка соединения с SQL сервером!",  16 , "ОШИБКА")
     RETURN .F.
ENDIF
SELECT T1
INDEX ON Nomer TAG Tag1
GOTO TOP
SCAN
      TEXT TO lcCommand TEXTMERGE NOSHOW PRETEXT  15 
           AddNewItem <<T1.Nomer>>, '<<T1.Name>>'
      ENDTEXT
      IF SQLEXEC(m.gnConnect, m.lcCommand) <  0 
           MESSAGEBOX("Ошибка выполнения команды " + m.lcCommand  + " на SQL сервере!",    16 , "ОШИБКА")
           RETURN .F.
      ENDIF
ENDSCAN
RETURN .F.
ENDFUNC
2. Серверная сторона:
Таблица называется Table1
Ее DDL команда может выглядить, например, так:
Код: plaintext
1.
2.
3.
4.
CREATE TABLE Table1 
( id_cls INT IDENTITY( 1 , 1 ) NOT NULL,
  id_supper_cls INT NULL,
 cls_name CHAR ( 40 ) NOT NULL
)
Хранимая процедура:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
CREATE  PROCEDURE [dbo].[AddNewItem]
	@NOMER INT = NULL,
	@NAME CHAR( 40 ) = NULL
AS
IF (@NOMER IS NULL) OR (@NAME IS NULL)
BEGIN
	RAISERROR('Не заданы все параметры!',  16 , 1 )
	RETURN (- 2 )
END
DECLARE @PARENT_ID INT
IF @NOMER =  0 
BEGIN
   -- Корневой Item
   INSERT INTO  Table1 (id_supper_cls,  cls_name)
      VALUES (NULL, @NAME)
   IF @@ERROR <>  0 
   BEGIN
	RAISERROR('Не могу добавить корневой Item!',  16 ,  1 )
	RETURN (- 1 )
   END
END
ELSE
BEGIN
   -- Подчиненный Item
   -- Сначала находи ранее добавленный корневой Item
   SELECT @PARENT_ID = id_cls FROM Table1 WHERE id_supper_cls IS NULL
   IF @PARENT_ID IS NULL
   BEGIN
	RAISERROR('Не могу найти корневой Item',  16 ,  1 )
	RETURN (- 1 )
   END
   INSERT INTO  Table1 (id_supper_cls,  cls_name)
   VALUES (@PARENT_ID, @NAME)
   IF @@ERROR <>  0 
   BEGIN
	RAISERROR('Не могу добавить подчиненный Item!',  16 ,  1 )
	RETURN (- 1 )
   END
END
RETURN ( 0 )
GO
GRANT EXECUTE ON dbo.AddNewItem TO Public
GO
Разумеется, это только пример кода. Вариантов очень много. Изучайте, пробуйте.
Удачи!
С уважением, Алексей
P.S. Код написан с учетом того, что у вас только одна запись корневого уровня и уровень вложения = 1
P.P.S. Для записи данных на сервер я использую технологию pass-through (PT)
P.P.P.S. Советую все-таки самому изучить язык MS SQL Server - Transact-SQL (T-SQL)
...
Рейтинг: 0 / 0
Подскажите код по заполнению таблиц, пожалуйста
    #34550990
Н.С.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибки. Буду разбираться.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Подскажите код по заполнению таблиц, пожалуйста
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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