powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вопросы по структуре, организации и принципам кода в VB6->
25 сообщений из 180, страница 6 из 8
Вопросы по структуре, организации и принципам кода в VB6->
    #36665580
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь ГорбоносА как юнионами? Нет! до завтра подумаю :)
в смысле, не подсказывать?
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36665812
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Shocker.Pro
> в смысле, не подсказывать?

Ну да
В принципе юнионами знаю, но это для ограниченного числа потомков. Что то типа(для трёх вложений)
Код: plaintext
1.
2.
3.
4.
5.
6.
select code, parent from t where code =  1  or parent =  1 
union all
select code, parent from t where parent in (select code from t where code =  1  or parent =  1 )
union all
select code, parent from t where parent in (
select code from t where parent in (select code from t where code =  1  or parent =  1 )
)
Или ты имел в виду что-то другое?

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36666125
tutti-frutti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбоносtutti-frutti,

нет ли в возможности в акцессе сделать что-то наподобии хранимой процедуры?

Нет, такой возможности нет. Можно использовать последние версии Access с интегрированными SQL серверами лайт версий, также можно в запросах использовать вызовы функций, но результатом работы конкретно моей программы будет поставка запросов инженерному комплексу, а он (зараза) отказывается втаскивать в свой функционал запросы с вызовами функций.
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36666146
tutti-frutti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбоносtutti-frutti,
Тогда вся задача сведётся к запросу рекордсета из процедуры и цикла по всем записям с построением дерева. И не будет нужды в отслеживании рекордсетов. :) Я так строю дерево данными из SQLServer'а

Не совсем понял что мы в результате выигрываем? Так или иначе, нужно перебрать все записи в таблице для того , чтобы "обнодить" дерево, или я чего-то не понимаю?

Что касается ключей нодов, то я учту. В самом начале пробовал подсовывать ему Str(recordSet1!ID) метот Add артачился и недавался, пришлось лепить вот этот @
Спасибо! :)
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36666174
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: tutti-frutti
> Нет, такой возможности нет.

Понятно, жаль. Но я все равно отделил-бы получение рекордсета от построения дерева. И в зависимости от дерева, возможно
развернул-бы все в линейный цикл, а не рекурсию. Хотя ... Но разделение пролучения и построения это в любом
случае! Потому что потом приходится возвращятся и разрисовывать строящееся дерево :). И это проще сделать в простом
цикле, чем отслеживать дебри рекурсии

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36666226
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: tutti-frutti
> Не совсем понял что мы в результате выигрываем? Так или иначе, нужно перебрать все записи в таблице для того ,
> чтобы "обнодить" дерево, или я чего-то не понимаю?

А ты посмотри на наши с Shocker.Pro коды построения деревьев. У меня идет сразу "цветовая дифференциация
штановнод", у Shocker.Pro кроме цвета ещё и восстанавливается распахнутость всех нод. У меня это делается
следующим проходом, потому что при моих 200-х пользователях и веб-сервисе я эти данные оставляю у пользователей на
компе(если они хотят). А ещё там несколько пересчетов, которые в итоге отображаются в лейблах нод, а ещё .... , а ещё
совсем недавно, каких-то пару лет назад это было простое деревце

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36666278
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рекомендую уважаемой публике срочно вкурить nested sets , не пожалеете.
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36666364
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Antonariy

Спасибо, я читал похожую статью на sql.ru, даже со скриптами сопровождения для MSSQL. Но действительно, не полностью
"въехал" в идею. Значит почитаем ещё :)

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36666377
tutti-frutti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос , кажись я понял о чем речь. Вы имеете в виду необходимость предварительной подготовки данных перед непосредственным построением дерева!? Типа, наполнить рекордсет (на основании которого будут наполняться ноды) вспомогательной инфой, которая поможет разукрасить и пробразить TreeView?
В принципе это наверное правильно ,так как сам рекордсет может быть сформирован и передан разными макарами. Учту на будущее.
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36666554
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос
> Автор: Antonariy

Спасибо, я читал похожую статью на sql.ru, даже со скриптами сопровождения для MSSQL. Но действительно, не полностью
"въехал" в идею. Значит почитаем ещё :)

Подарю две самые сложные процедуры, остальные легко перевести на mssql самостоятельно

Код: 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.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
ALTER PROCEDURE [dbo].[mp_TreeRecalc]
@ARG varchar( 50 ),
@RefID int,
@Level int,
@LeftKey int OUTPUT,
@RightKey int OUTPUT,
@RecCount int OUTPUT
as


SET @Level = @Level +  1 

DECLARE @Qry nvarchar( 4000 ), @s varchar( 20 ), @tbl varchar( 53 ), @pk varchar( 50 )

set @tbl = @ARG

select	top  1   @pk = c.column_name
from	INFORMATION_SCHEMA.KEY_COLUMN_USAGE c 
inner join INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS b on c.constraint_name = b.unique_constraint_name
where	c.table_name = @tbl

select @s = cast(@RefID as varchar( 20 ))

SET @Qry = '
DECLARE @' + @pk + ' int, @LeftKey int, @RightKey int, @Level int, @RK int, @RecCount int
SET @LeftKey = ' + cast(@LeftKey as varchar( 10 )) + '
SET @RightKey = ' + cast(@RightKey as varchar( 10 )) + '
SET @Level = ' + cast(@Level as varchar( 10 )) + '

DECLARE treecursor' + @s + ' CURSOR fast_forward FOR
SELECT ' + @pk + '
FROM  ' + @tbl + ' 
WHERE (RefID = ' + @s + ')
/*ORDER BY Name_RU*/

OPEN treecursor' + @s + '

FETCH next FROM treecursor' + @s + ' INTO @' + @pk + '

WHILE @@FETCH_STATUS = 0 BEGIN
	SET @LeftKey = @RightKey + 1
	SET @RightKey = @LeftKey + 1

	UPDATE ' + @tbl + '
	SET [Level] = @Level, LeftKey = @LeftKey
	WHERE (' + @pk + ' = @' + @pk + ')
	SET @RK = @RightKey - 1
	EXEC mp_TreeRecalc ''' + @ARG + ''', @' + @pk + ', @Level, @LeftKey out, @RK out, @RecCount out
	IF (@RK = @RightKey - 1) 
		SET @RightKey = @RK + 1 
	ELSE 
		SET @RightKey = @RK 
	UPDATE ' + @tbl + '
	SET RightKey = @RightKey, ChildCount = @RecCount
	WHERE (' + @pk + ' = @' + @pk + ')
	FETCH next FROM treecursor' + @s + ' INTO @' + @pk + '
END

CLOSE treecursor' + @s + '
DEALLOCATE treecursor' + @s 
EXEC (@Qry)

set @Qry = 'SELECT @RecCount = COUNT(' + @pk + ') FROM ' + @tbl + ' WHERE RefID = ' + cast(@RefID as varchar( 50 ))
exec sp_executesql @Qry, N'@RecCount int out', @RecCount = @RecCount out

IF @RecCount >  0  BEGIN
	set @Qry = 'SELECT @LeftKey = MAX(LeftKey) + 1, @RightKey = MAX(RightKey) + 1
		FROM ' + @tbl +  ' WHERE RefID = ' + cast(@RefID as varchar( 50 ))
	--print @Qry
	exec sp_executesql @Qry, N'@LeftKey int out, @RightKey int out', 
		@LeftKey = @LeftKey out, @RightKey = @RightKey out

END
Эта процедура считает левые и правые ключи на основании отношения Id-ParentId.
Здесть ParentId это RefID. Для расчета всего дерева во все параметры нужно передать нули. Первый параметр — название таблицы.

Код: 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.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
ALTER PROCEDURE [dbo].[mp_TreeMove]
@ARG varchar( 50 ),
@ID int, 
@new_parent_id int = - 1 , 
@id_befor int = - 1 ,
@Step int =  0 
as 

SET NOCOUNT ON 

declare @Qry nvarchar( 4000 ), @tbl as varchar( 53 ), @pk varchar( 50 ), @IDVal varchar( 50 )

set @tbl = @ARG

select	top  1   @pk = c.column_name
from	INFORMATION_SCHEMA.KEY_COLUMN_USAGE c 
inner join INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS b on c.constraint_name = b.unique_constraint_name
where	c.table_name = @tbl


	--IF (@new_parent_id = -1) and (@id_befor = -1)  RETURN
	DECLARE @Level varchar( 50 ), @LeftKey varchar( 50 ), @RightKey varchar( 50 ), @RefID varchar( 50 )
	DECLARE @level_up varchar( 50 ), @parent_Lk varchar( 50 ), @parent_Rk varchar( 50 ), @Rk_near varchar( 50 ) 

	--Ключи и уровень перемещаемого узла 
	set @Qry = 'SELECT @Level = [Level], @LeftKey = LeftKey, @RightKey = RightKey, @RefID = RefID FROM ' + @tbl + ' WHERE ' + @pk + ' = ' + @IDVal
	exec sp_executesql @Qry, N'@Level varchar(50) out, @LeftKey varchar(50) out, @RightKey varchar(50) out, @RefID varchar(50) out', 
		@Level = @Level out, @LeftKey = @LeftKey out, @RightKey = @RightKey out, @RefID = @RefID out

	--Ключи и уровень нового родительского узла 
	IF (@new_parent_id <> - 1 ) BEGIN
		set @Qry = 'SELECT @level_up = [Level] FROM ' + @tbl + ' WHERE (' + @pk + ' = ' + cast(@new_parent_id as varchar( 50 )) + ')'
		exec sp_executesql @Qry, N'@level_up varchar(50) out', @level_up = @level_up out

		set @Qry = 'UPDATE	' + @tbl + ' SET RefID = ' + cast(@new_parent_id as varchar( 50 )) + ' WHERE ' + @pk + ' = ' + @IDVal 
		exec (@Qry)
	END ELSE 
		IF (@RefID >  0 ) begin
			set @Qry = 'SELECT @level_up = [Level] FROM ' + @tbl + ' WHERE (' + @pk + ' = ' + @RefID + ')'
			exec sp_executesql @Qry, N'@level_up varchar(50) out', @level_up = @level_up out
		end ELSE
			SELECT @level_up =  1  

	IF (@new_parent_id = - 1 ) BEGIN
		IF (@id_befor = - 1 ) BEGIN --select @RK_near = LeftKey + 1 from tblOwnerCtlg where OwnerCtlgID = @new_parent_id 
			IF (@Step = - 1 )	begin
				set @Qry = 'SELECT @Rk_near = RightKey FROM ' + @tbl + ' WHERE ([Level] = ' + @Level + ') AND (LeftKey = ' + @RightKey + ' + 1)'
				exec sp_executesql @Qry, N'@Rk_near varchar(50) out', @Rk_near = @Rk_near out
			end
			IF (@Step =  1 )	BEGIN 
				set @Qry = 'SELECT @Rk_near = RightKey FROM ' + @tbl + ' WHERE  ([Level] = ' + @Level + ') AND (RightKey = (SELECT LeftKey - 1 FROM ' + @tbl + ' WHERE RightKey = ' + @LeftKey + ' - 1))'
				exec sp_executesql @Qry, N'@Rk_near varchar(50) out', @Rk_near = @Rk_near out
				IF (@Rk_near IS NULL) begin
					set @Qry = 'SELECT @Rk_near = LeftKey FROM ' + @tbl + ' WHERE ([Level] = ' + @Level + ' - 1) AND (LeftKey = (SELECT LeftKey - 1 FROM ' + @tbl + ' WHERE RightKey = ' + @LeftKey + ' - 1))'
					exec sp_executesql @Qry, N'@Rk_near varchar(50) out', @Rk_near = @Rk_near out
				end
			END
			IF (@Step =  0 ) or (@Rk_near IS NULL) SELECT @Rk_near = @LeftKey -  1 
		END
	END
	ELSE BEGIN
		IF (@id_befor = - 1 ) begin --select @RK_near = LeftKey + 1 from tblOwnerCtlg where OwnerCtlgID = @new_parent_id 
			set @Qry = 'SELECT @Rk_near = RightKey - 1 FROM ' + @tbl + ' WHERE (' + @pk + ' = ' + cast(@new_parent_id as varchar( 50 )) + ')' 
			exec sp_executesql @Qry, N'@Rk_near varchar(50) out', @Rk_near = @Rk_near out
		end ELSE begin
			set @Qry = 'SELECT @Rk_near = RightKey FROM ' + @tbl + ' WHERE (' + @pk + ' = ' + cast(@id_befor as varchar( 50 )) + ')'
			exec sp_executesql @Qry, N'@Rk_near varchar(50) out', @Rk_near = @Rk_near out
		end
	END
	--делаем по необходимости корректировку 
	IF (@Rk_near is null) SELECT @Rk_near = '0' 
	PRINT @Rk_near
	--Определяем хар-ки перемещения 
	DECLARE @skew_level varchar( 50 ), @skew_tree varchar( 50 ) 
	SET @skew_level =CAST(cast(@level_up as int) - cast(@Level as int) +  1  AS varchar( 50 ))
	SET @skew_tree = cast(cast(@RightKey as int) - cast(@LeftKey as int) +  1  as varchar( 50 ))

	--Перемещаем 
	DECLARE @skew_edit varchar( 50 ) 
	IF (cast(@RightKey as int) < cast(@Rk_near as int)) BEGIN 
		SET @skew_edit = cast(@Rk_near as int) - cast(@LeftKey as int) +  1  - @skew_tree 
		--PRINT @skew_edit
		set @Qry = 'UPDATE	' + @tbl + ' 
		SET		LeftKey =  CASE WHEN RightKey <= ' + @RightKey + ' THEN LeftKey + ' + @skew_edit + ' ELSE CASE WHEN LeftKey > ' + @RightKey + ' THEN LeftKey - ' + @skew_tree + ' ELSE LeftKey END END, 
				[Level] = CASE WHEN RightKey <= ' + @RightKey + ' THEN [Level] + ' + @skew_level + ' ELSE [Level] END, 
				RightKey =  CASE WHEN RightKey <= ' + @RightKey + ' THEN RightKey + ' + @skew_edit + '  ELSE CASE WHEN RightKey <= ' + @Rk_near + ' THEN RightKey - ' + @skew_tree + ' ELSE RightKey END END 
		WHERE	(RightKey > ' + @LeftKey + ') and 
				(LeftKey <= ' + @Rk_near + ')'
	END ELSE BEGIN 
		SET @skew_edit = cast(@Rk_near as int) - cast(@LeftKey as int) +  1  
		--PRINT @skew_edit
		set @Qry = 'UPDATE	' + @tbl + ' 
		SET		RightKey =  CASE WHEN LeftKey >= ' + @LeftKey + ' THEN RightKey + ' + @skew_edit + ' ELSE CASE WHEN RightKey < ' + @LeftKey + ' THEN RightKey + ' + @skew_tree + ' ELSE RightKey END END, 
				[Level] = CASE WHEN LeftKey >= ' + @LeftKey + ' THEN [Level] + ' + @skew_level + ' ELSE [Level] END, 
				LeftKey =  CASE WHEN LeftKey >= ' + @LeftKey + ' THEN LeftKey + ' + @skew_edit + ' ELSE CASE WHEN LeftKey > ' + @Rk_near + ' THEN LeftKey + ' + @skew_tree + ' ELSE LeftKey END END 
		WHERE	(RightKey > ' + @Rk_near + ') and 
				(LeftKey < ' + @RightKey + ')'
	END 
	exec(@Qry)
Эта процедура используется для перемещения узла по дереву.
Если задан параметр @new_parent_id, но не задан @id_befor, узел будет последним у родителя. Если @id_befor задан, узел вставится после заданного. Параметр @Step используется для перемещения узла вверх (-1) или вниз (+1) по родителю, @new_parent_id и @id_befor должны быть при этом равны -1.
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36667557
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь ГорбоносВ принципе юнионами знаю, но это для ограниченного числа потомков. Что то типа(для трёх вложений)

Или ты имел в виду что-то другое?


Скажем так - для фиксированного числа вложений, иначе без курсора не обойтись.

Ну я имел ввиду что-то похожее, только я не очень люблю IN, предпочитаю JOIN-ы.
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36667560
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tutti-fruttiНе совсем понял что мы в результате выигрываем? Так или иначе, нужно перебрать все записи в таблице для того , чтобы "обнодить" дерево, или я чего-то не понимаю?

Выигрываем то, что внутренний цикл переносится на сторону SQL-
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36667568
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.Protutti-fruttiНе совсем понял что мы в результате выигрываем? Так или иначе, нужно перебрать все записи в таблице для того , чтобы "обнодить" дерево, или я чего-то не понимаю?

Выигрываем то, что внутренний цикл переносится на сторону SQL-

БЛИН, иногда задеваю Ctrl-Enter...

Выигрываем то, что внутренний цикл переносится на сторону SQL-движка. Если все происходит на одной машине, это может и не критично. Если же ты используешь клиент-серверную архитектуру - использовать запросы внутри цикла - моветон. Большие накладные расходы на отправку запросов и получение ответов. Проще заставить сервер, чтобы он вернул тебе один ответ - сразу все дерево.
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36667575
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tutti-fruttiИгорь Горбонос , кажись я понял о чем речь. Вы имеете в виду необходимость предварительной подготовки данных перед непосредственным построением дерева!? Типа, наполнить рекордсет (на основании которого будут наполняться ноды) вспомогательной инфой, которая поможет разукрасить и пробразить TreeView?
В принципе это наверное правильно ,так как сам рекордсет может быть сформирован и передан разными макарами. Учту на будущее.

Важно не сколько наполнение инфой о цвете, тэгах и т.п. - это-то как раз просто всякие вкусняшки. Важно то, что не насилуется канал до сервера внутренним циклом запросов.
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36667585
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AntonariyПодарю две самые сложные процедуры, остальные легко перевести на mssql самостоятельно

Пока просмотрел статью по диагонали и...

Я-то подумал, что там организовывается структура, которая позволяет сделать выборку дерева с помощью запроса, без использования рекурсии. Однако, в том что ты привел я вижу курсоры - тогда уж ничего не понимаю... В принципе, для создания дерева достаточно одного-единственного поля - родитель (если сортировка, скажем, идет не по алфавиту, то еще и сортировочный номер), а там какие-то боковые номера....

Впрочем, обязательно выделю время на курение статьи
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36667736
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProЯ-то подумал, что там организовывается структура, которая позволяет сделать выборку дерева с помощью запроса, без использования рекурсии. Так и есть.
Shocker.ProОднако, в том что ты привел я вижу курсоры - тогда уж ничего не понимаю... Курсоры используются для первичного построения дерева согласно принципам nested sets из исходного дерева, построенного по принципам parent-children, в статье этот момент не разжеван. Там есть основные вещи — выборка всего дерева, подчиненных ветвей, родительской ветки.

А вот более интересный пример, который выбирает только те ветки дерева, в которых присутствуют узлы определенного типа, то есть дерево с обрубленными лишними ветвями:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
SELECT	DISTINCT 
	OC.OwnerCtlgID, 
	OC.RefID, 
	OC.Name_RU, 
	OC.LeftKey, 
	OC.RightKey, 
	OC.[Level]
FROM    dbo.tblOwnerCtlg AS OC 
INNER JOIN dbo.tblOwnerCtlg AS OCt ON 
	OCt.LeftKey >= OC.LeftKey AND 
	OCt.RightKey <= OC.RightKey
WHERE     (OCt.Type =  5 )
Попробуй сделать такую выборку через parent — вывихнешь моск.
С nested sets работа с деревьями превращается в песню.
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36667751
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Antonariy
> С nested sets работа с деревьями превращается в песню.

+1
Из той статью, что читал я, главная трудоемкость заключалась в реорганизации самого дерева, если перетаскивается или
удаляется кустик :)
А сами запросы были простейшими

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36677668
tutti-frutti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть необходимость менять значение поля(лей) в тексте запроса. Речь идет о полях константах , которые прописываются в виде заключенных в кавычки строк и которым назначаются алиасы.
Ну например, вот текст запроса, который выбирает из таблицы записи и добавляет к каждой записи два поля Library_Path и Footprint_Path.
(Так нужно для той программы ,которая потом возьмет результаты выполнения этого запроса)

Код: plaintext
1.
2.
SELECT Library_Ref, Footprint_Ref, "C:\ADLib\SchLib\Discrete.SchLib" AS [Library_Path], "C:\ADLib\PcbLib\Discrete.PcbLib" AS [Footprint_Path] 
FROM
T_Components

Я планирую открыть соединение с акцессом, удалить запрос, сформировать текст нового на основании новых значений констант, а потом создать запрос в базе акцесс. Принципиально это возможно?
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36677678
tutti-frutti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Речь идет о программе в VB6.
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36677686
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
делайте через отсоединённый рекордсет
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36677716
tutti-frutti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneделайте через отсоединённый рекордсет

А почему именно так? Мне нужно иметь в базе ацес именно запрос. Этот запрос потом подтянет программа (Altium Designer) именно ради результатов этого запроса весь сыр-бор. То есть грубо говоря, моя программа (на басике) строит дерево, дает возможность его наполнить/изменить и прочее, а результатом всего этого будет вот этот запрос, который предоставит возможность пользователю серьезной инженерной программы выбрать компонент из многомиллионной базы компонентов.
в этом запросе должны указыватся пути к составным частям библиотеки компонентов. Я планирую создать раздел "настройка" в программе и положить туда эти пути, которые можно будет изменять и изменения в которых будут транслироваться в этот самый запрос.
Пока писал понял, что можно не пересоздавать запрос, а просто дооснастить его связями с таблицей в которой и буду лежать пути.
Спасибо! :)
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36678739
tutti-frutti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
    strMessage = "Не удается установить связь с базой данных" & vbCrLf & "Укажите путь к файлу *.mdb"
MsgBox strMessage

Окошко MsgBox выскакивает с шапкой в которой прописан Project1. Имя проекта я изменил. Шо делать? :)
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36678752
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tutti-frutti
Код: plaintext
1.
    strMessage = "Не удается установить связь с базой данных" & vbCrLf & "Укажите путь к файлу *.mdb"
MsgBox strMessage

Окошко MsgBox выскакивает с шапкой в которой прописан Project1. Имя проекта я изменил. Шо делать? :)

там ещё параметры есть у этого метода
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36678757
tutti-frutti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Onetutti-frutti
Код: plaintext
1.
    strMessage = "Не удается установить связь с базой данных" & vbCrLf & "Укажите путь к файлу *.mdb"
MsgBox strMessage

Окошко MsgBox выскакивает с шапкой в которой прописан Project1. Имя проекта я изменил. Шо делать? :)

там ещё параметры есть у этого метода

У какого именно метода? MsgBox? Хорошо ,сейчас порыскаю в нете.
...
Рейтинг: 0 / 0
Вопросы по структуре, организации и принципам кода в VB6->
    #36678765
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tutti-fruttiKonst_Onetutti-frutti
Код: plaintext
1.
    strMessage = "Не удается установить связь с базой данных" & vbCrLf & "Укажите путь к файлу *.mdb"
MsgBox strMessage

Окошко MsgBox выскакивает с шапкой в которой прописан Project1. Имя проекта я изменил. Шо делать? :)

там ещё параметры есть у этого метода

У какого именно метода? MsgBox? Хорошо ,сейчас порыскаю в нете.


MsgBox "gbdshbdg",,,
...
Рейтинг: 0 / 0
25 сообщений из 180, страница 6 из 8
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Вопросы по структуре, организации и принципам кода в VB6->
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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