Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: СУБД и Delphi/Lazarus

  Все выпуски  

RusFAQ.ru: СУБД и Delphi


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / СУБД и Delphi

Выпуск № 343
от 12.06.2007, 12:05

Администратор:Gh0stik
В рассылке:Подписчиков: 333, Экспертов: 47
В номере:Вопросов: 3, Ответов: 4


Вопрос № 90266: здраствуйте. вопрос - надо сделать изменения в базе: добавить несколько таблиц, права доступа к ним, удалить старые триггеры и вставить новые. все конечно можно сделать и в WISQL, но.. к каждой подключаться...если бить частями текст sql' (напр. созда...
Вопрос № 90328: Здравствуйте эксперты! вопрос? у меня есть столбцы в которых записаны числа(много чисел), так вот как мне посчитать количество каждого столбца? какую мне использовать процедуру подскажите? ..
Вопрос № 90367: Здравствуйте Эксперты!!! При установки соединения с серверной СУБД (конкретнее с MS SQL Server) если она не запущена выскакивает ошибка(Project adn.exe raised exception class EoleException with message ‘[DBNETLIB][ConnectionOpen(Connect()).]SQL –...

Вопрос № 90.266
здраствуйте. вопрос - надо сделать изменения в базе: добавить несколько таблиц, права доступа к ним, удалить старые триггеры и вставить новые. все конечно можно сделать и в WISQL, но.. к каждой подключаться...если бить частями текст sql' (напр. создание; потом дать права и др) - работает, но хотелось чтобы из текст.файла выполнился кусок кода по нажатию кнопки:)
вобщем то ошибка (если правильно определила) возникает после точки запятой. в текст.файле код:
CREATE TABLE VED1 ( KODVED... PRIMARY KEY (..));
CREATE TABLE VED2 ( KODVED1... PRIMARY KEY (..));
GRANT ALL ON VED1 TO PUBLIC;..
DROP TRIGGER KART_INS;
SET TERM !!;
CREATE TRIGGER KART_INS FOR KART ... и т.д.

в данном случае начинает ругаться на CREATE TABLE VED2 (??? или...)
вобщем помогите...


Приложение:

Отправлен: 06.06.2007, 13:31
Вопрос задала: SadKitty (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 7)

Отвечает: Архангельский Андрей Германович
Здравствуйте, SadKitty!
Разработку БД лучше всю вести в SQL-скриптах, тогда можно не только добавлять/удалять, но и вставлять большой кусок одного проекта в другой.
Наполнение БД также легче делать из скриптов.

Скрипт исполняется в isql.exe, можно построить .bat файл, который запустит несколько скриптов. Из скрипта много проще отлавливать ошибки. Достаточно в файле результата найти слово SQLCODE обычным текстовым поиском. После SQLCODE идет подробное описание ошибки с указанием строки и колонки запроса.

Более убедительные доводы см. в книге Хелен Борри "Firebird руководство программиста"

В примере удалена вся информация, которая могла бы помочь найти ошибку.
---------
Если дело заслуживает быть сделаным, то оно заслуживает, чтобы его сделали ХОРОШО
Ответ отправил: Архангельский Андрей Германович (статус: Специалист)
Ответ отправлен: 06.06.2007, 19:47


Вопрос № 90.328
Здравствуйте эксперты!
вопрос? у меня есть столбцы в которых записаны числа(много чисел), так вот как мне посчитать количество каждого столбца? какую мне использовать процедуру подскажите?
Отправлен: 06.06.2007, 19:37
Вопрос задал: Павел А.О (статус: 1-ый класс)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 7)

Отвечает: Устинов С.Е.
Здравствуйте, Павел А.О!

Так как Вы задали вопрос в раздел СУБД и Delphi, то буду считать, что эта таблица у Вас находится в какой-то базе данных, а доступ туда осуществляется из Delphi.
Тогда для подсчета значений удовлетворяющих условию нужно выполнить SQL-запрос:
SELECT COUNT(`имя_поля`) FROM `имя_таблицы` WHERE условие
Если нужно посчитать только количество значений в столбце:
SELECT COUNT(`имя_поля`) FROM `имя_таблицы`
Если нужно посчитать количество разных значений в столбце:
SELECT COUNT( DISTINCT `имя_поля`) FROM `имя_таблицы`
Если нужно посчитать сумму по столбцу:
SELECT SUM(`имя_поля`) FROM `имя_таблицы`

Удачи!
---------
Ждешь квалифицированного ответа? Задай правильно вопрос!
Ответ отправил: Устинов С.Е. (статус: Специалист)
Ответ отправлен: 06.06.2007, 19:49
Оценка за ответ: 5
Комментарий оценки:
Спасибо за совет!

Отвечает: Delph
Здравствуйте, Павел А.О!

Если я правильно Вас понял, то имеется ввиду следующее: есть столбцы, в которых прописаны числа, и в таблице много строк. Нужно количество строк, в которых в нужных полях что-то есть...

Существует функция Count, которая поддерживается большинством СУБД. Формат такой:

select Count(FieldName) from TableName

Возвращается одно число. Можно задать какие либо условия отбора:

select Count(FieldName) from TableName where ...

Если всю эту конструкцию обернуть в круглые скобки, то можно подставлять её в более крупный запрос, только желательно результату давать какое-то имя:

(select Count(FieldName) from TableName where (...)) as NewFieldName

Пример такого запроса:

select
spName_ID, spName,
(select count(Chuvack_ID) from Chuvacks where Name_Key = spName_ID) as Chuvacks_Count
from spNames

Существуют ещё функции Sum (сумма всех значений), Avg (среднее арифметическое)...

Если Вы имели ввиду что-то другое, уточните свою задачу. И пожалуйста: указывайте, с чем работаете. Многие вещи уникальны для каждой конкретной СУБД (например, в MySQL нет транзакций, в PostgreSQL отсутствуют процедуры, которые заменены функциями, в MS SQL существует конструкция CASE, которую я не встречал пока в других СУБД...).
Ответ отправил: Delph (статус: 3-ий класс)
Ответ отправлен: 07.06.2007, 09:34


Вопрос № 90.367
Здравствуйте Эксперты!!!
При установки соединения с серверной СУБД (конкретнее с MS SQL Server) если она не запущена выскакивает ошибка(Project adn.exe raised exception class EoleException with message ‘[DBNETLIB][ConnectionOpen(Connect()).]SQL – сервер не существует, или отсутствует доступ’. Process stopped. Use Step or Run to continue. ) Как мне перехватить эту ошибку и вывести из приложение сообщение об включении сервера. Я делал так:
Uses ComObj;
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
try
ADOConnection1. Connected:=true;
except
on EOleException do MessageDlg('Подключите SQL server 2000!', mtWarning,[mbOk], 0);
но почему то она все равно пропускает ошибку. Подскажите, может я использую не тот класс Исключения. Если так то посоветуйте другой – более конкретный.
P.S. Пробовал EdatabaseError – та же беда!
Отправлен: 07.06.2007, 03:15
Вопрос задал: Ram (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Delph
Здравствуйте, Ram!

Можно использовать более грубую форму перехвата:

try
ADOConnection1. Connected:=true;
except
on e: Exception do MessageDlg(e.Message, mtWarning,[mbOk], 0);
end;

Такой вариант перехватит любое исключение, возникшее в защищаемом блоке.
Ответ отправил: Delph (статус: 3-ий класс)
Ответ отправлен: 07.06.2007, 09:41
Оценка за ответ: 5
Комментарий оценки:
Спасибо вам! Хотя она и не давала нужного результата но с вашей подсказки я нашел решение (Delphi7->Tools->Debugger Option->Language Exceptions->Stop on Delphi Exceptions->false)


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.52 от 02.05.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное