Поиск:

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


Шустрый
*


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

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



//Выбираем sql
 M_Lsab->ADOQueryLsab->SQL->LoadFromFile("Lsab2.sql");
 Str1 = M_Lsab->ADOQueryLsab->SQL->Text;
 //Выбираем куда грузить набор данных из таблицы
 M_Lsab->DataSourceLsab->DataSet = M_Lsab->ADOQueryLsab;
 //Связываем возвращаемый набор данных и визуальные компоненты
 DBGrid1->DataSource =  M_Lsab->DataSourceLsab;
 DBNavigatorSprLsab->DataSource =  M_Lsab->DataSourceLsab;
 //открываем
 M_Lsab->ADOQueryLsab->Open();

ВОПРОС:
1. Как проверить БД на пустоту и выдать при этом сообщение
2. Как проверить БД на правильность структуры (т.е. ,если вдруг поменялась структура таблицы,то мой SQL-запрос не сработает и мне при этом  надо выдать сообщение-обработать ошибку).

Я не знаю обработку ошибок .

Спасибо. 
PM MAIL   Вверх
Anikmar
Дата 17.4.2007, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



1. У TADOQuery есть метод IsEmpty()
2. В достаточной мере зависит от СУБД (хотя может быть можно использовать TADOCommand - тут я не особо петрю)
PM MAIL ICQ   Вверх
ura5
Дата 17.4.2007, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



 M_Lsab->ADOQueryLsab->Open();
if ( M_Lsab->ADOQueryLsab->IsEmpty())
    ShowMessage("Справочник пуст!");

Спасибо
PM MAIL   Вверх
ura5
Дата 17.4.2007, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



M_Lsab->ADOQueryLsab->SQL->LoadFromFile("Lsab2.sql");

ВОПРОС:
Как проверить  существование этого запроса? Есть он или нет?
То же самое что спросить есть ли таблица или нет.

Спасибо.
PM MAIL   Вверх
Anikmar
Дата 17.4.2007, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



На счет файла - легко if (FileExists("..."))

На счет таблицы - универсальный ловить исключение, если запрос не открылся или смотреть документацию БД
PM MAIL ICQ   Вверх
IgorDV
Дата 17.4.2007, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Если СУБД Oracle, то можно так проверить на существование таблиц
   
Код

 OraQuery->Close(); 
    OraQuery->SQL->Clear();
    OraQuery->SQL->Text = "select count(table_name) from user_catalog 
                          where table_type<>'SYNONYM'/*'TABLE'...*/ and table_name in ('tabl1','tabl2','tabl3','tabl4','tabl5','tabl6')"
    OraQuery->Open();
    if (OraQuery->FieldAsInteger(0)!=6)
    {
      ShowMessage("У Вас недостаточно полномочий для работы с данной программулиной. ");
      return 0;
    }
 smile 
PM MAIL ICQ   Вверх
Coala
Дата 18.4.2007, 09:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(ura5 @  17.4.2007,  11:31 Найти цитируемый пост)
2. Как проверить БД на правильность структуры (т.е. ,если вдруг поменялась структура таблицы,то мой SQL-запрос не сработает и мне при этом  надо выдать сообщение-обработать ошибку).

Я не знаю обработку ошибок .

Код

  try {
    Query->Open();
  }
  catch (Exception &E) {
    ShowMessage(E.Message.c_str());
  }

Это - самый примитивный обработчик. 
PM MAIL   Вверх
Nat
Дата 18.4.2007, 09:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте! Подскажите, пожалуйста, как проверить выполнение ADOQuery1->ExecSQL()? InEmpty() в данной ситуации не работает.
PM MAIL   Вверх
Anikmar
Дата 18.4.2007, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Nat @  18.4.2007,  09:58 Найти цитируемый пост)
Здравствуйте! Подскажите, пожалуйста, как проверить выполнение ADOQuery1->ExecSQL()? InEmpty() в данной ситуации не работает. 

Посмотрите хелп по этой функции.
По-моему она возвращает количество обработанных записей.
PM MAIL ICQ   Вверх
Nat
Дата 18.4.2007, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да я бы с радостью! Только у меня Builder без Help'а :( 
PM MAIL   Вверх
ura5
Дата 18.4.2007, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо за запрос.
Извините за неграммотность.Я работаю в СУБД Oracle.Но не на сколько его знаю.
Этот запрос отработал на Oracle и вернул число записей ноль.Я поставила вместо tabl1,...,tabl6 имена таблиц (TABLES).
Я не поняла что это за   /*'TABLE'...*/   Видимо,что-то здесь свое надо поставить.Не знаю что.
Помогите

Добавлено через 8 минут и 55 секунд

ВСЕ РАБОТАЕТ.СПАСИБО.
PM MAIL   Вверх
Anikmar
Дата 18.4.2007, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(Nat @  18.4.2007,  10:12 Найти цитируемый пост)
Да я бы с радостью! Только у меня Builder без Help'а :(  


Достаточно часто вижу такую проблему.

Вопрос к администрации форума: Может быть выложить арзив хелпов по билдеру на сайт? Это будет нарушением авторских прав?
PM MAIL ICQ   Вверх
Coala
Дата 18.4.2007, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(Nat @  18.4.2007,  09:58 Найти цитируемый пост)
как проверить выполнение ADOQuery1->ExecSQL()? InEmpty() в данной ситуации не работает.
И не будет! ExecSQL() - это для запросов на изменение данных, а тебе надо просто открыть запрос на выборку через
Query->Open().

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


Новичок



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

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



Мне и надо изменить данные smile Поэтому ExecSQL и использую. А потом надо выдать сообщение, что все прошло успешно/ не прошло успешно. Какое для этого свойство Query посмотреть?
PM MAIL   Вверх
Anikmar
Дата 18.4.2007, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Хелп по функции Exec

Executes the SQL statement for the ADO query.

int __fastcall ExecSQL(void);

Description

Call ExecSQL to execute the SQL statement currently assigned to the SQL property. Use ExecSQL to execute queries that do not return a cursor to data (such as INSERT, UPDATE, DELETE, and CREATE TABLE).

ExecSQL returns an integer value reflecting the number of rows affected by the executed SQL statement.

Note:    For SELECT statements, call Open instead of ExecSQL or set the Active property to true.

To speed performance, an application should ordinarily prepare the query by setting the Prepared property to true before calling ExecSQL for the first time.


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

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

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

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

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


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

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


 




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


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

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