Поиск:

Ответ в темуСоздание новой темы Создание опроса
> узнать установленные бд 
V
    Опции темы
TaNK
Дата 27.5.2008, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



есть код....я его попробывал переделать из дельфей...но что не получилось...хочу запихнуть в комбобокс все бд установленные на MSSQL2000 вот код...
#include <bde.hpp>
*.h
Код

private:
           hDBIDb      hDB;
           hDBICur     hCursor;
           DBDesc      DBDesc ;
           TBLBaseDesc TblDesc;


*.cpp
Код

DBIResult Rslt;
    CFGDesc Config;
    //
    AliasesList->Items->Clear();
    hDB = NULL;
    try
       {
         DbiInit(NULL);
         DbiOpenDatabaseList(hCursor);
         do
          {
            Rslt = DbiGetNextRecord(hCursor, dbiNOLOCK, &Config, NULL);
            if (Rslt != DBIERR_EOF) AliasesList->Items->Add(StrPas(DBDesc.szName));
            DbiCloseCursor(hCursor);
          }
         while (Rslt != DBIERR_NONE);
       }
    catch(...)
             {
                 ShowMessage("Ошибка инициализации BDE");
             }


есть большие опасения....что ошибка в этом - &Config я не знаю что туда передать....



--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
TaNK
Дата 27.5.2008, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



ну может хоть есть какие нить идеи....помогите плиз....

Добавлено @ 17:01
сделал вот как....изменил только в  11 строчке
Код

DBIResult Rslt;
    //
    AliasesList->Items->Clear();
    hDB = NULL;
    try
       {
         DbiInit(NULL);
         DbiOpenDatabaseList(hCursor);
         do
          {
            Rslt = DbiGetNextRecord(hCursor, dbiNOLOCK, &DBDesc, NULL);
            if (Rslt != DBIERR_EOF) AliasesList->Items->Add(StrPas(DBDesc.szName));
            DbiCloseCursor(hCursor);
          }
         while (Rslt != DBIERR_NONE);
        }
    catch(...)
             {
                 ShowMessage("Ошибка инициализации BDE");
             }

но в комбобокс выводит токо DBDEMOS.

Это сообщение отредактировал(а) TaNK - 27.5.2008, 17:02


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
Лена
Дата 27.5.2008, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 879
Регистрация: 16.8.2006

Репутация: 11
Всего: 11



PM MAIL   Вверх
TaNK
Дата 27.5.2008, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Цитата(Лена @ 27.5.2008,  17:01)
http://cbuilder.ru/index.php/topic,1981.0.html

вариант не очень...хочется средствами С++


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
Alca
Дата 27.5.2008, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Код

//Список работающих локальных серверов на С++

// функция проверки состояния сервиса#include <registry.hpp>
//---------------------------------------------------------------------------
bool ServiceIsRunning( String name_comp, String name_service ) 
{
  _SERVICE_STATUS svc_status;
  svc_status.dwCurrentState = 1;
  SC_HANDLE h_manager = OpenSCManager( name_comp.c_str(), NULL, SC_MANAGER_CONNECT);
  if( h_manager <= NULL )
    return false;
  bool result = false;
  SC_HANDLE h_svc = OpenService(h_manager, name_service.c_str(), SERVICE_QUERY_STATUS);
  if( h_svc >  NULL )
  {
      if( QueryServiceStatus( h_svc, &svc_status ) )
        result = (SERVICE_RUNNING == svc_status.dwCurrentState);
     CloseServiceHandle(h_svc);
  }
  CloseServiceHandle(h_manager);
  return result;
}

//достать список локальным сервиcов из registry 
//---------------------------------------------------------------------------
vector<String> LocalMSSQLServerListRegistry()   
{
    vector<String> result;
    TRegistry *reg = new TRegistry;
    reg->Access = KEY_READ;
    reg->RootKey = HKEY_LOCAL_MACHINE;
    String key_name = "SOFTWARE\\Microsoft\\Microsoft SQL Server\\";

    char *list_servers = new char[1024];
    int sz = 1024;
    if( reg->KeyExists( key_name ) )
          if( reg->OpenKey(key_name, false) )
          {
              sz = reg->GetDataSize("InstalledInstances");
              reg->ReadBinaryData( "InstalledInstances", list_servers, sz );
          }
    int pos=NULL; 
    for(int i = 0; i < sz; i++)
        if( list_servers[i] == '\0' )
        {
            String name_instance = (list_servers + pos);
            if( name_instance != NULL && !name_instance.IsEmpty() )
                result.push_back(name_instance);
            pos = i+1;
        }
    delete [] list_servers;
    delete reg;
    return result;
}

//проверить какие из сервисов запущены и вернуть актуальный список
//при этом в качестве Default имени возвращается имя компьютера вместо (local)
vector<String> LocalMSSQLServerList()   // from registry
{
    vector<String> result;
    vector<String> lst = LocalMSSQLServerListRegistry();
    String name_comp = GetComputerName();
    for(unsigned i = 0; i < lst.size(); i++)
    {
        String name_instance = lst[i];
        String name_service ;
        bool isDefault = name_instance.AnsiCompareIC("MSSQLSERVER") == NULL;
        if( isDefault )
            name_service = name_instance;
        else
            name_service = "MSSQL$" + name_instance;

        if( ServiceIsRunning( name_comp, name_service ) ) 
            result.push_back(isDefault ? name_comp : name_instance);
    }
    return result;
}

//Вот вариант получше:
#include <lm.h>

LPSERVER_INFO_101 pServerEnum;
DWORD dwResult, dwRead, dwTotal;

dwResult = NetServerEnum(NULL, 101,    (BYTE**) &pServerEnum, -1, &dwRead, &dwTotal, SV_TYPE_SQLSERVER, NULL, 0);
if ( dwResult == NERR_Success )
for ( DWORD i=0; i<dwRead; i++ ) {
    // куда-нибудь вывести (экран и т.д.):
    /*
    AnsiString( (LPCWSTR) pServerEnum[ i ].sv101_name );
    AnsiString( (LPCWSTR) pServerEnum[ i ].sv101_comment );
    */
}

//Такое сработает, только если у меня SQL установлен. И выдаст только те, к которым уже была регистрация.



--------------------
PM WWW ICQ Skype Jabber   Вверх
Rififi
Дата 27.5.2008, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 1
Всего: 36



Цитата(TaNK @  27.5.2008,  17:03 Найти цитируемый пост)
.хочется средствами С++ 

C++ не в курсе что такое "База данных" и "MS SQL Server", неувязочка однако.
PM MAIL   Вверх
Alca
Дата 27.5.2008, 17:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



А кто в курсе?


--------------------
PM WWW ICQ Skype Jabber   Вверх
Rififi
Дата 27.5.2008, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 1
Всего: 36



Тот, очевидно, кто разрабатывает конкретную СУБД и предоставляет API к ней...
PM MAIL   Вверх
TaNK
Дата 28.5.2008, 08:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



вот код...который работает на дельфях..который я попытался перевести на с++
но не получилось
Код

unit Unit1;

interface

uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,BDE, Grids, DBGrids, ComCtrls, DB, ADODB, Buttons,
  DBTables, Mask, Registry;

type
  TForm1 = class(TForm)
    AliasesList: TComboBox;
    procedure FormCreate(Sender: TObject);
  private
            hDB: hDBIDB;
            hCursor: hDBICur;
            DBDesc: DBDesc;
          //  TblDesc: TBLBaseDesc;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var Rslt: DBIResult;
begin
 AliasesList.Items.Clear; // combobox
 hDB := Nil;
 try
  DbiInit(Nil);   // Инициализация BDE
  DbiOpenDatabaseList(hCursor);
  repeat
   Rslt:= DbiGetNextRecord(hCursor, dbiNOLOCK, @DBDesc, nil);
   if (Rslt <> DBIERR_EOF) then AliasesList.Items.Add(StrPas(DBDesc.szName));
  until (rslt <> DBIERR_NONE);
  DbiCloseCursor(hCursor);
 except
  //on E:EDBEngineError do
  ShowMessage('Ошибка инициализации BDE');
 end;

end;

end.


какие я допустил ошибки при переводе на С++?


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
TaNK
Дата 28.5.2008, 13:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



ну пожайлуста.....помогите..очень нужно...


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
mrbrooks
Дата 28.5.2008, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



На вскидку могу предложить убрать проверку 
Код

            if (Rslt != DBIERR_EOF) AliasesList->Items->Add(StrPas(DBDesc.szName));


поменяв просто на

Код

            AliasesList->Items->Add(StrPas(DBDesc.szName));


Глянь что получится.
PM MAIL   Вверх
TaNK
Дата 28.5.2008, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



> mrbrooks 
НЕ помогло....в комбобокс пихает токо DBDEMOS


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
Alca
Дата 28.5.2008, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Тебе надо только BDE-шные базы?

Это сообщение отредактировал(а) Alca - 28.5.2008, 16:10


--------------------
PM WWW ICQ Skype Jabber   Вверх
TaNK
Дата 28.5.2008, 16:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 669
Регистрация: 29.10.2006
Где: Краснодар

Репутация: нет
Всего: 1



Цитата(Alca @ 28.5.2008,  16:07)
Тебе надо только BDE-шные базы?

ну да.....


--------------------

Oracle 11.2.0.3.0
FireBird 1.0-2.5


PM MAIL ICQ   Вверх
Alca
Дата 29.5.2008, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Код

Unit1.h

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <BDE.hpp>
#include <DBTables.hpp>
#include <DB.hpp>
#include <ADODB.hpp>
#include <Mask.hpp>
#include <Registry.hpp>
//---------------------------------------------------------------------------
class TfrmMain : public TForm {
    __published:
        TButton*    btnStart;
        TComboBox *AliasesList;
        void __fastcall FormCreate(TObject *Sender);

    private:
        hDBIDb  hDB;
        hDBICur hCursor;
        DBDesc  DBDesc;
        //TblDesc: TBLBaseDesc;

    public:    
        __fastcall TfrmMain(TComponent* Owner);
        __fastcall ~TfrmMain();
};
//---------------------------------------------------------------------------
extern PACKAGE TfrmMain *frmMain;
//---------------------------------------------------------------------------
#endif
 
 
Unit1.cpp

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
//---------------------------------------------------------------------------
TfrmMain *frmMain;
//---------------------------------------------------------------------------
__fastcall TfrmMain::TfrmMain(TComponent* Owner) : TForm(Owner) {}
//---------------------------------------------------------------------------
__fastcall TfrmMain::~TfrmMain() {}
//---------------------------------------------------------------------------
void __fastcall TfrmMain::FormCreate(TObject *Sender) {
    DBIResult Rslt;

    AliasesList->Items->Clear(); // combobox
    hDB = NULL;
    try {
        DbiInit(NULL);   // Инициализация BDE
        DbiOpenDatabaseList(hCursor);
        do {
            Rslt = DbiGetNextRecord(hCursor, dbiNOLOCK, &DBDesc, NULL);
            if (Rslt != DBIERR_EOF) {
                AliasesList->Items->Add(StrPas(DBDesc.szName));
            }
        }
        while (/*Rslt != DBIERR_NONE*/Rslt == 0);

        DbiCloseCursor(hCursor);
    } catch (Exception &exception) {
        Application->ShowException(&exception);
    }                    
}
//---------------------------------------------------------------------------





--------------------
PM WWW ICQ Skype Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.1052 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.