Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Подскажите код по заполнению таблиц, пожалуйста / 12 сообщений из 12, страница 1 из 1
24.05.2007, 13:15
    #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
24.05.2007, 13:55
    #34548440
Aleksey-K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите код по заполнению таблиц, пожалуйста
Какую технологию работы с SQL Server вы используете? (CA, PT, RV)

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

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

С уважением, Алексей
...
Рейтинг: 0 / 0
24.05.2007, 16:20
    #34549050
Н.С.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите код по заполнению таблиц, пожалуйста
Ну, да. Это я понимаю, что нужно сначала добавлять запись "родителя" (благо он в данном случае 1), а потом остальные записи. Только я не знаю как. Покажите пожалуйста пример кода.
...
Рейтинг: 0 / 0
25.05.2007, 10:19
    #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
25.05.2007, 12:41
    #34550990
Н.С.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подскажите код по заполнению таблиц, пожалуйста
Спасибки. Буду разбираться.
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Подскажите код по заполнению таблиц, пожалуйста / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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