powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Такое сделано в Кроносе...а как мне сделать что то подобное
6 сообщений из 6, страница 1 из 1
Такое сделано в Кроносе...а как мне сделать что то подобное
    #32491478
'FaTsO'
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такие базы данных Кронос так там есть очень прикольная вещь.
Когда ты занимаешься поиском, там открывается форма такого вида:
Форма разделена на две части - с одной стороны некое дерево которое
показывает в каких таблицах найдено слово которое ищешь,
при нажатии на одно из пунктов этого дерева с другой стороны появляется
DBGrid в котором отображаются все записи этой таблицы удовлетворяющие
условию поиска.
А как такое реализовать самому, больше всего меня интересует вот эта
система с деревом....)))

Заранее большое спасибо...)))
...
Рейтинг: 0 / 0
Такое сделано в Кроносе...а как мне сделать что то подобное
    #32491640
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
'FaTsO'
У тебя постоянно такие глобальные вопросы :)
Я уже начинаю ждать вопрос типа: "А как мне написать винды типа 2000 тока вот с такой-то финтиплюхой?..." :)

Ты спрашивай конкретные вещи, ибо общие "как построить дерево" ("как посадить дом" ) есть во всяких справочниках.

Дерево рулится просто. По всяким событиям на нём (как-то клики, развороты, етс..) Родитель получает нотификацию через WM_COMMAND с кодом нотификации и хэндлом дерева. Дальше, к примеру, если прилетел клик, смотришь, какой у тебя элемент выделен в дереве (есть макрос) и открывает соответствующий грид.
...
Рейтинг: 0 / 0
Такое сделано в Кроносе...а как мне сделать что то подобное
    #32491648
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хмм
не вижу ничего затрудняющего ,

как осущесвить поиск слов(записей) во всех таблицах имеющихся
в твоей бд есть пример на форуме по MSSQL .

а все остальное не такая уж и сложная задача .




i_i
(';')
(V),(V),,
JS
...
Рейтинг: 0 / 0
Такое сделано в Кроносе...а как мне сделать что то подобное
    #32491721
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2CEMb
ему нужно будет рулить с компенентой TTreeView скорее всего ,
а там не так уж и сложно , половина функция за него уже реализовано :)


i_i
(';')
(V),(V),,
JS
...
Рейтинг: 0 / 0
Такое сделано в Кроносе...а как мне сделать что то подобное
    #32491735
'FaTsO'
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 CEMb
Наверное ты прав чета лихо слишком закрутил...
Я наверное поспешил с этим вопросом...т.к. вешь то особо то и не сложная

Всем спасибо за внимание...)))
...
Рейтинг: 0 / 0
Такое сделано в Кроносе...а как мне сделать что то подобное
    #32494471
DJStealth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Произвести поиск строки по всей базе данных:

Код: 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.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
declare @s varchar (1000 )
set @s='подстрока'  

SET NOCOUNT ON  
DECLARE @TableID int, @TableName sysname  
DECLARE @ColumnName sysname, @Type sysname, @IsNullable int  
DECLARE @Columns varchar (8000 ), @Where varchar (8000 )
DECLARE @MarkNum bit  

 -- таблица, содержащая результаты поиска  
 
CREATE TABLE #Result (TableName sysname, String ntext)  

 -- признак того, искать ли среди числовых значений  
 
SET @MarkNum = IsNumeric(@s)

 -- искать подстроку  
 
SET @s='%' + @s + '%'  

 -- курсор по всем пользовательским таблицам базы данных  
 
DECLARE #Table CURSOR LOCAL FAST_FORWARD FOR  

select id, name from sysobjects
where status&gt ;0  and xtype='U'  

OPEN #Table
WHILE @@ERROR =0 

BEGIN  

  FETCH NEXT FROM #Table INTO @TableID, @TableName

  IF @@FETCH_STATUS<&gt ;0  BREAK  

 -- пропустить таблицы, к которым нет доступа  
 

  if IS_SRVROLEMEMBER('dbcreator') =0  AND  

    not EXISTS(select *  

    from INFORMATION_SCHEMA.TABLE_PRIVILEGES a

    join sysusers b on b.name=a.GRANTEE and b.issqlrole =1 

    join sysusers c on c.gid=b.gid and c.issqlrole =0  and c.name=USER_NAME()

    where a.PRIVILEGE_TYPE='SELECT' and a.TABLE_NAME=@TableName

    ) CONTINUE  

  SET @Columns=''  

 -- курсор по всем колонкам текущей таблицы  
 
  DECLARE #Column CURSOR LOCAL FAST_FORWARD FOR  

  select a.name, b.name, a.isnullable from syscolumns a
  join systypes b on b.xtype=a.xtype and b.xusertype&lt ;256 
  where id=@TableID order by colid  

  OPEN #Column
  WHILE @@ERROR =0 

  BEGIN  
    FETCH NEXT FROM #Column INTO @ColumnName, @Type, @IsNullable
    IF @@FETCH_STATUS<&gt ;0  BREAK  

    if (@Type <> 'image' and @Type <> 'bit' and CHARINDEX('text', @Type) =  0 )
      and (@MarkNum =1  or CHARINDEX('char', @Type) >  0  or CHARINDEX('datetime', @Type) >  0 )

    begin  

      if @IsNullable =  1  SET @Columns = @Columns + 'isnull('  
      if (CHARINDEX('char', @Type) >  0 )
        SET @Columns = @Columns + @ColumnName
      else if (CHARINDEX('datetime', @Type) >  0 )  
        SET @Columns = @Columns + 'convert(varchar,' + @ColumnName + ',104)'  
      else  
        SET @Columns = @Columns + 'cast(' + @ColumnName + ' as varchar)'  

      if @IsNullable =  1 
        SET @Columns = @Columns + ','''')+'' | ''+'  
      else  
        SET @Columns = @Columns + '+'' | ''+'  
    end  

  END  

  CLOSE #Column

  DEALLOCATE #Column

  IF @Columns <> ''  
  BEGIN  
    SET @Columns = LEFT(@Columns, LEN(@Columns) -7 )
    SET @Where = @Columns + ' like ''' + @s + ''''  

exec('insert #Result  

select ''' + @TableName + ''',' + @Columns + '
from ' + @TableName + '
where ' + @Where)

  END  
END  

CLOSE #Table
DEALLOCATE #Table
SET NOCOUNT OFF  
SELECT * FROM #Result
DROP TABLE #Result 

Код не отличается быстродействием, но дело свое делает. Замечу еще, что в данном коде можно использовать все прелести оператора LIKE, используя символы %,_ и т.п.

------
Пр(CTime::GetCurrentTime()) ? (о) : (и)шло время спать
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Такое сделано в Кроносе...а как мне сделать что то подобное
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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