|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Доброго вам дня.
Остро встала необходимость, написать элементарную программу на 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
|
||||
|
||||
Цитата:
Цитата:
Цитата:
Цитата:
а что не получается то ? Поживу - увижу, Доживу - узнаю, Выживу - учту. [P.S.]->Выражая благодарность за помощь - Вы получаете шанс на помощь в следующий раз
|
Этот пользователь сказал Спасибо Yurk@ за это полезное сообщение: | ||
Budjaka (14.02.2013)
|
#3
|
|||
|
|||
1. На основании формулирования sql запроса. Например SELECT user_access FROM dbo.user WHERE user_name = 'Admin';
А можно пример программы которая вытаскивает всю таблицу, и отображает ее на форме? А так же описание компонентов, что будут использоваться и их настройки? ------------ Да вообще ничего не получается. Не работал в делфи с sql ) |
#4
|
|||
|
|||
Цитата:
На форму кидаются: 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
|
|||
|
|||
Все, в какую сторону копать я понял,спасибо огромное. Будет еще парочку вопросов. Например :
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
|
||||
|
||||
Начну с последнего вопроса.
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']; 1. Если выбран тип поля TMemo, то так и будет. TMemo в отличии от тогоже Varchar может хранить текст в несколько строк, а стандартный грид не умеет выводить такой многострочный текст, потому выводится просто уведомление, что там внутри что-то есть. Для просмотра содержимого текущего Memo-поля можно использовать комонент TDBMemo. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
Budjaka (17.02.2013)
|
#7
|
|||
|
|||
Страдалец, чуток не понимаю (но буду разбираться), т.к. запрос в таблицу я кладу так :
Код:
Q.SQL.ADD('SELECT user_name FROM TUser'); Q.Open; Имеется у меня таблица 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' И хранить в поле в базе данных, а при запросе - собирать циклом обратно в массив. Ну это мое мнение. Так вот - какой тип данных выбрать в БД (тип поля)? Или есть варианты хранить массив как массив? Есть же типы для полей типа имэйдж, или видео. Может есть готовый тип для массивов? Заранее превеликое спасибо Цитата:
- этот код вешает приложение, т.е. цикл крутится бесконечно. Делаю просто : Код:
S := Q.FieldValues['user_pass']; -Все работает Последний раз редактировалось M.A.D.M.A.N., 18.02.2013 в 08:49. Причина: Объединил сообщения |
#8
|
|||
|
|||
Ребят, помогите в паре вышеописанных вопросов, пожалуйста!
А именно, сейчас нужно : 1. Если выполнить запрос Код:
SELECT User_Name From dbo.TUser Подскажите как загнать в массив строк, все эти значения? 2. Если в DbGrid выводится 2 столбца, в них значения типа float, примерно так : ....x....y - --------- | 15 | 26 | - --------- | 36 | 32 | . ---------- Можно ли как либо сделать такую вещь : 2.1 Если поле из столбца X больше чем поле из столбца Y, то сделать это поле другим. Т.е. поменять шрифт на красный, или залить другим цветом? Последний раз редактировалось Budjaka, 19.02.2013 в 16:09. |
#9
|
||||
|
||||
Цитата:
Код:
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
|
||||
|
||||
По массивам я дал пример, а по изменению цвета в гриде вам надо почитать статейку на эту тему. Там много чего интетесного есть помимо закраски ячейки по событию.
Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
Budjaka (20.02.2013)
|