Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2009, 20:21   #11
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

у юзверя д.б. выбор - пусть выбирает то, что работает и актуально

а список "разных" таблиц можно и укоротить, наложив фильтр like 'plan%'
soleil@mmc вне форума Ответить с цитированием
Старый 23.04.2009, 13:59   #12
MargoNik
Пользователь
 
Регистрация: 20.03.2009
Сообщений: 32
По умолчанию

Огромное спасибо, почти со всем разобралась.

To ANDREI:
Создав таблицу с помощью Query, она появляется в бд, но в DBGid не отображается. Всё подключено правильно-в свойстве DataSet DataSourse - Query, в DBGrid-DataSouse, в чем может быть ошибка?
вот код:
Код:
ADOQuery1.Close;
 ADOQuery1.SQL.Clear;
 ADOQuery1.SQL.Add('CREATE TABLE plan***(поле1, поле2 и т.д.)')
 AdoQuery1.ExecSQL;
И ещё как сделать так, чтоб пользователь сам задавал имена создаваемых таблиц,я имею ввиду, как это в запросе прописать?
MargoNik вне форума Ответить с цитированием
Старый 23.04.2009, 14:18   #13
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

MargoNik, попробуйте сделать чтобы можно было присваивать имена полей вводимые в Edit.
Например я бы попробовал сделать так:
Код:
('CREATE TABLE plan***' +'(' +Edit1.Text+','+ +Edit2.Text+')'+')'
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 23.04.2009, 14:47   #14
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Цитата:
Сообщение от MargoNik Посмотреть сообщение
Огромное спасибо, почти со всем разобралась.

To ANDREI:
Создав таблицу с помощью Query, она появляется в бд, но в DBGid не отображается. Всё подключено правильно-в свойстве DataSet DataSourse - Query, в DBGrid-DataSouse, в чем может быть ошибка?
вот код:
Код:
ADOQuery1.Close;
 ADOQuery1.SQL.Clear;
 ADOQuery1.SQL.Add('CREATE TABLE plan***(поле1, поле2 и т.д.)')
 AdoQuery1.ExecSQL;
....
Никакой ошибки нет. CREATE TABLE не возвращает от сервера никаких данных. Чтобы получить данные из таблицы (даже если она пустая) нужно выполнить новый запрос на получение данных с использованием SELECT. Тогда результат запроса появится в Gride.

Цитата:
И ещё как сделать так, чтоб пользователь сам задавал имена создаваемых таблиц,я имею ввиду, как это в запросе прописать?
Query.SQL - это обычный текст. Представляет из себя набор строк в котором записаны команды SQL. Следовательно, все манипуляции с текстом применимы и здесь:

Код:
ADOQuery1.Close;
 ADOQuery1.SQL.Clear;
 ADOQuery1.SQL.Add('CREATE TABLE '+ Trim(Edit1.Text)+'(поле1, поле2 и т.д.)')
 AdoQuery1.ExecSQL;
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 23.04.2009, 15:11   #15
MargoNik
Пользователь
 
Регистрация: 20.03.2009
Сообщений: 32
По умолчанию

Всем большое спасибо, завтра обязательно попробую.
MargoNik вне форума Ответить с цитированием
Старый 27.04.2009, 04:23   #16
MargoNik
Пользователь
 
Регистрация: 20.03.2009
Сообщений: 32
По умолчанию

Всё получилось, спасибо. Только не получается открыть вновь созданную таблицу.
Цитата:
Сообщение от Andrei Посмотреть сообщение
Чтобы получить данные из таблицы (даже если она пустая) нужно выполнить новый запрос на получение данных с использованием SELECT. Тогда результат запроса появится в Gride.
Точнее получается, но только с конкретно созданным именем. Например имя вновь создаваемой таблицы пишется в Edit1. Таблицы создаются, затем я пытаюсь открыть только что созданную так:
Код:
ADOQuery.Close;
ADOQuery.SQL.CLEAR;
ADOQuery.SQL.ADD('SELECT * FROM'+Trim(Edit1.Text));
ADOQuery.open;
Таким способом выдается ошибка. Получается открыть только указав конкретное имя после FROM.
MargoNik вне форума Ответить с цитированием
Старый 27.04.2009, 04:25   #17
MargoNik
Пользователь
 
Регистрация: 20.03.2009
Сообщений: 32
По умолчанию

А как при таком создании таблиц быть с вычисляемыми полями?
Как с ADOTable не получается.
MargoNik вне форума Ответить с цитированием
Старый 27.04.2009, 06:24   #18
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Цитата:
Сообщение от MargoNik Посмотреть сообщение
Всё получилось, спасибо. Только не получается открыть вновь созданную таблицу.

Точнее получается, но только с конкретно созданным именем. Например имя вновь создаваемой таблицы пишется в Edit1. Таблицы создаются, затем я пытаюсь открыть только что созданную так:
Код:
ADOQuery.Close;
ADOQuery.SQL.CLEAR;
ADOQuery.SQL.ADD('SELECT * FROM'+Trim(Edit1.Text));
ADOQuery.open;
Таким способом выдается ошибка. Получается открыть только указав конкретное имя после FROM.
А где пробел после FROM? При вашей записи у вас получается:

SELECT * FROMMyTableName

А должно быть:

SELECT * FROM MyTableName

Конечно будет ошибка.
Как я писал ранее, Query.SQL - это просто набор строк с командами SQL. Их можно спокойно загрузить в компонент Memo и посмотреть какое SQL выражение у вас получилось в результате ваших махинаций. Например так:

Код:
ADOQuery.Close;
ADOQuery.SQL.CLEAR;
ADOQuery.SQL.ADD('SELECT * FROM '+Trim(Edit1.Text));
Memo1.Clear;
Memo1.Lines:=ADOQuery1.SQL;
ADOQuery.open;

Я всегда так делаю при отладке какого-нибудь сложного запроса, создающегося в режиме runtime или когда вылетает какая-то непонятная для меня ошибка, связанная с запросом.
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 27.04.2009, 07:37   #19
Andrei
Форумчанин
 
Регистрация: 20.06.2007
Сообщений: 270
По умолчанию

Цитата:
Сообщение от MargoNik Посмотреть сообщение
А как при таком создании таблиц быть с вычисляемыми полями?
Как с ADOTable не получается.
Вообще-то вычисляемые поля - это не принадлежность таблицы. Это принадлежность создаваемого вами набора данных. Здесь возможны два пути:

1. Создать соединение с помощью ADOTable и назначить вычисляемые поля ручками, как вы, видимо, и делали. Потом при открытии набора данных менять только свойство ADOTabe.TableName в зависимости от нужной таблицы.

2. Создать SQL запрос на получение данных с уже вычисленными полями. Что-то на подобии такого:

Код:
SELECT *, (cena*kol) as summa FROM MyTable
, где
cena - поле таблицы содержащее цену товара;
kol - поле таблицы содержащее количество товара;
summa - вычисляемое поле, которое будет в наборе данных выведено под именем summa (Присваивать свое имя вычисляемого поля в запросе не обязательно. Тогда имя ему будет присвоено автоматически.)

На первый взгляд кажется проще первый вариант, но в целях надежности работы программы я бы рекомендовал второй с созданием своих SQL запросов на вставку, редактирование и удаление записей.

Дело в том, что ADOTable фактически представляет из себя SQL запрос вида SELECT* FROM MyTable который, в случае модификации данных автоматически создает SQL запросы на изменение таблицы и выполняет их. И делает он это довольно криво так как разработчики пытались объять необъятное и создать один универсальный запрос на всевозможные случаи. Лучше взять управление в свои руки и сделать надежно работающую программу конкретно для своих таблиц, с учетом всех особенностей работы с ними.
-Кукушка, кукушка! Накукуй мне сто лет!
-А накукуй тебе столько?

(с) Библия. Вольный перевод с древнееврейского.
Andrei вне форума Ответить с цитированием
Старый 27.04.2009, 14:49   #20
MargoNik
Пользователь
 
Регистрация: 20.03.2009
Сообщений: 32
По умолчанию

To ANDREI:
огромное вам спасибо,у меня всё получилось. Вы очень грамотно и понятно всё описали. Я только совсем начинающий программист, поэтому возникло столько вопросов.
MargoNik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение и открытие Image (размер и положение) с типизированным файлом Лукманов Александр Общие вопросы Delphi 4 31.03.2009 13:55
Сохранение и открытие файлов Kantor Общие вопросы Delphi 1 15.12.2008 05:21
Открытие формы inret Общие вопросы Delphi 3 06.05.2008 14:37
Открытие файла Lexakazanskij Паскаль, Turbo Pascal, PascalABC.NET 9 01.11.2007 22:27
как перехватить открытие чужого приложенияпытаюсь перехватить открытие любого приложе rpy3uH Win Api 2 02.12.2006 12:12