Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 13.02.2013, 11:35
Budjaka Budjaka вне форума
Прохожий
 
Регистрация: 13.02.2013
Сообщения: 15
Репутация: 10
По умолчанию

Доброго вам дня.
Остро встала необходимость, написать элементарную программу на Delphi, но как для человека который не работал из Delphi с SQl, она непосильна, т.к. некоторые моменты неясны. Вкратце о том что делаю :
Программа будет работать с БД MySQL или MS SQL (на данный момент).
В БД содержатся 6 табличек. В каждой табличке по 4 столбца.
Программа по замыслу должна :
1. На первой форме как то вывести всю табличку 1 (table1)
2. На второй форме вывести всю табличку 2 (table2), и позволить пользователю кликнув мышой в определенную ячейку, занести значение этой ячейки, например в Edit1
3. На третьей форме отображения таблицы не будет. программа должна считать нужное поле из таблицы 3, и поместить это значение в переменную
Вот. Сам язык SQL мне знаком, пользуюсь постоянно. Однако,начал читать по делфям и компонентам предоставляющим доступ к sql - запутался намертво, DBExpress, DBGO, BDE , жуть.
Вопросы собственно таковы (если можно ответы нумеруйте):
1. С помощью каких компонентов создать подключение к БД, и выполнить запрос?
2. DBExpress, DBGO, BDE - с точки зрения ламера, это 3 почти одинаковых набора, и выбрать надобно один, и работать с компонентами с этого набора?
3. С помощью чего на форму выводится информация с SQL запроса?
4. Можно ли результат SELECT засунуть в переменную?
Для абсолютной и полной ясности, вы можете даже показать мне код, и параметры нужных компонентов, где :
1. На первой форме создается подключение к БД 'DBNAME', выполняется SELECT * FROM dbo.users, и все это дело выводится на форму
2. На этой же форме,когда предыдущее условие выполнено, и на форме уже готовая табличка, при клике на определенную ячейку, значение этой ячейки помещается в переменную.
3. На этой же форме Выполняется SELECT user_name FROM dbo.users WHERE user_id = '1', и результат запроса кладется в переменную USNAME.
Это будет просто супер.
Подскажите пожалуйста, если надо - отблагодарю, или помогу чем смогу, за исключением программирования).
Заранее спасибо..
Или возможно есть компонент который просто будет выводить таблицу, без работы со всякими SQL запросами прямо из БД?

Быть может я неверно сформулировал свой вопрос?
Ребят, выручите пожалуйста

Последний раз редактировалось M.A.D.M.A.N., 18.02.2013 в 08:48. Причина: Объединил сообщения
Ответить с цитированием
  #2  
Старый 14.02.2013, 12:42
Аватар для Yurk@
Yurk@ Yurk@ вне форума
Специалист
 
Регистрация: 07.09.2007
Адрес: Украина, г. Днепропетровск
Сообщения: 892
Версия Delphi: 7 + ОгнеПтица
Репутация: выкл
По умолчанию

Цитата:
3. На третьей форме отображения таблицы не будет. программа должна считать нужное поле из таблицы 3, и поместить это значение в переменную
на основании какого критерия будет определятся нужное поле?
Цитата:
1. С помощью каких компонентов создать подключение к БД, и выполнить запрос?
2. DBExpress, DBGO, BDE - с точки зрения ламера, это 3 почти одинаковых набора, и выбрать надобно один, и работать с компонентами с этого набора?
вкладка ADO или DBGO по новому
Цитата:
3. С помощью чего на форму выводится информация с SQL запроса?
вручную или через DBGrid
Цитата:
4. Можно ли результат SELECT засунуть в переменную?
можно

а что не получается то ?
__________________
Поживу - увижу, Доживу - узнаю, Выживу - учту.
[P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
Ответить с цитированием
Этот пользователь сказал Спасибо Yurk@ за это полезное сообщение:
Budjaka (14.02.2013)
  #3  
Старый 14.02.2013, 18:46
Budjaka Budjaka вне форума
Прохожий
 
Регистрация: 13.02.2013
Сообщения: 15
Репутация: 10
По умолчанию

1. На основании формулирования sql запроса. Например SELECT user_access FROM dbo.user WHERE user_name = 'Admin';
А можно пример программы которая вытаскивает всю таблицу, и отображает ее на форме?
А так же описание компонентов, что будут использоваться и их настройки?
------------
Да вообще ничего не получается. Не работал в делфи с sql )
Ответить с цитированием
  #4  
Старый 14.02.2013, 21:07
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,050
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Budjaka
1. На основании формулирования sql запроса. Например SELECT user_access FROM dbo.user WHERE user_name = 'Admin';
А можно пример программы которая вытаскивает всю таблицу, и отображает ее на форме?
А так же описание компонентов, что будут использоваться и их настройки?
------------
Да вообще ничего не получается. Не работал в делфи с sql )

На форму кидаются:
ADOConnection
ADOQuery (ADOTable если всегда нужна вся таблица)
DataSource
DBGrid

Связываются (DBGrid -> DataSource -> ADOTable/ADOQuery -> ADOCOnnection /по соотв. свойствам, обычно имеют имена, перекликающиеся с именем соотв. компонента/), в ADOConnection указывается ConnectionString, в ADOTable - TableName (или нужный запрос в ADOQuery). Далее, наример в OnCreate формы, пишется что-то типа:
Код:
procedure TForm1.FormCreate(Sender : TObject);
begin
  ADOConnection1.Connected := True;
  ADOTable1.Open;
end;
Если все сделано правильно, то при запуске программы на форме в гриде покажется содержимое соотв. таблицы.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Budjaka (15.02.2013)
  #5  
Старый 15.02.2013, 09:04
Budjaka Budjaka вне форума
Прохожий
 
Регистрация: 13.02.2013
Сообщения: 15
Репутация: 10
По умолчанию

Все, в какую сторону копать я понял,спасибо огромное. Будет еще парочку вопросов. Например :
1. Почему в DBGRID у меня вместо нужного мне текста везде отображается (MEMO), если тип данных varchar(max).
2. Что такое varchar(50) - тип данный в котором максимум 50 символов?
3. Как результат SELECT user_pass FROM Tuser WHERE user_name = 'Admin' ; положить в переменную?
Заранее спасибо_)

Последний раз редактировалось Budjaka, 15.02.2013 в 11:26.
Ответить с цитированием
  #6  
Старый 15.02.2013, 19:44
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Начну с последнего вопроса.
3. Примерно так:
Код:
Q: TAdoQuery;
S: String;
...
Q.SQL.Text := 'SELECT user_pass FROM Tuser WHERE user_name = :user_name' ;
Q.Parameters.ParamValues['user_name'] := 'Admin';
Q.Open;
while not Q.Eof
do S := Q.FieldValues['user_pass'];
2. В принципе да, но в отличие от String[50] где поле будет всегда 50 символов, независимо от содержания, varchar хранит только значимую часть строки, потому намного более компактная вещь для хранения данных
1. Если выбран тип поля TMemo, то так и будет. TMemo в отличии от тогоже Varchar может хранить текст в несколько строк, а стандартный грид не умеет выводить такой многострочный текст, потому выводится просто уведомление, что там внутри что-то есть. Для просмотра содержимого текущего Memo-поля можно использовать комонент TDBMemo.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
Budjaka (17.02.2013)
  #7  
Старый 17.02.2013, 21:56
Budjaka Budjaka вне форума
Прохожий
 
Регистрация: 13.02.2013
Сообщения: 15
Репутация: 10
По умолчанию

Страдалец, чуток не понимаю (но буду разбираться), т.к. запрос в таблицу я кладу так :
Код:
Q.SQL.ADD('SELECT user_name FROM TUser');
Q.Open;
1.Но примерно понял. Еще такой момент хотелось бы спросить.
Имеется у меня таблица TUSERS. В таблице есть столбец varchar(50), который зовут User_Name. Он хранит список пользователей. Пользователей порядка девяноста человек. Не подскажешь ли ты, как мне результат SELECT User_Name FORM TUSERS (список пользователей) положить в массив MS[].
Например если в столбце будут юзеры Admin, Root, Valera итп, чтобы в результате запроса юзеры положились в массив, и я мог видеть его (и работать с ним) вроде того :
MS[1] = 'Root'
MS[2] = 'Valera'
2. Какой тип данных выбрать в СУБД для хранения очень длинной строки, а еще лучше массива? Т.е. есть у меня скажем массив TMS[1..20] array of integer. Как я его могу хранить в БД ? Как строку, с разделением значений через запятую?
Т.е. если скажем массив
TMS[1] = 14
TMS[2] = 18
TMS[3] = 28
TMS[4] = 37
Для его хранения, мне проще будет разобрать его на строку вида
'14,18,28,37'
И хранить в поле в базе данных, а при запросе - собирать циклом обратно в массив. Ну это мое мнение.
Так вот - какой тип данных выбрать в БД (тип поля)?
Или есть варианты хранить массив как массив?
Есть же типы для полей типа имэйдж, или видео. Может есть готовый тип для массивов?
Заранее превеликое спасибо

Цитата:
Сообщение от Страдалецъ
while not Q.Eof
do S := Q.FieldValues['user_pass'];

- этот код вешает приложение, т.е. цикл крутится бесконечно. Делаю просто :
Код:
 S := Q.FieldValues['user_pass']; 
MAD: тег CODE!
-Все работает

Последний раз редактировалось M.A.D.M.A.N., 18.02.2013 в 08:49. Причина: Объединил сообщения
Ответить с цитированием
  #8  
Старый 19.02.2013, 15:57
Budjaka Budjaka вне форума
Прохожий
 
Регистрация: 13.02.2013
Сообщения: 15
Репутация: 10
По умолчанию

Ребят, помогите в паре вышеописанных вопросов, пожалуйста!
А именно, сейчас нужно :
1. Если выполнить запрос
Код:
SELECT User_Name From dbo.TUser
То в DbGrid положатся имена всех пользователей.
Подскажите как загнать в массив строк, все эти значения?
2. Если в DbGrid выводится 2 столбца, в них значения типа float, примерно так :
....x....y
- ---------
| 15 | 26 |
- ---------
| 36 | 32 |
. ----------

Можно ли как либо сделать такую вещь :
2.1 Если поле из столбца X больше чем поле из столбца Y, то сделать это поле другим. Т.е. поменять шрифт на красный, или залить другим цветом?

Последний раз редактировалось Budjaka, 19.02.2013 в 16:09.
Ответить с цитированием
  #9  
Старый 20.02.2013, 07:54
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Цитата:
Сообщение от Budjaka
- этот код вешает приложение, т.е. цикл крутится бесконечно.
Упппс.. Это я ложанулся. Я там перехода по записям не делаю вот он и крутится на первой. Должно быть так:
Код:
Q: TAdoQuery;
S: String;
...
Q.SQL.Text := 'SELECT user_pass FROM Tuser WHERE user_name = :user_name' ;
Q.Parameters.ParamValues['user_name'] := 'Admin';
Q.Open;
while not Q.Eof
do begin
    S := Q.FieldValues['user_pass'];
    Q.Next;
    end;
Для запихивания в массив чуток меняем код:
Код:
...
i := 0;
while not Q.Eof
do begin
    Inc(i);
    MS[i] := Q.FieldValues['user_pass'];
    Q.Next;
    end;
...
[/code]или так:
Код:
...
for i := 1 to Q.RecordCount
do begin
    MS[i-1] := Q.FieldValues['user_pass'];
    Q.Next;
    end;
...
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
Budjaka (20.02.2013)
  #10  
Старый 20.02.2013, 08:00
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

По массивам я дал пример, а по изменению цвета в гриде вам надо почитать статейку на эту тему. Там много чего интетесного есть помимо закраски ячейки по событию.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
Budjaka (20.02.2013)
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:40.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter