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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2012, 15:40   #1
Phantosmagor
Пользователь
 
Регистрация: 14.03.2012
Сообщений: 24
По умолчанию ADOQuery without Grid

Добрый день, уважаемые форумчане. Въелась мне в голову идея написать простой GUI для внесения данных в базу MySQL ( 1 таблица, с 10 колонками), и простенького отчёта и фильтрации.

*Опыта программирования - 2 дня (не студент). А написать нужно вот-вот...

Попробовав свои силы на данном поприще смог выводить данные из SQL Таблицы, посредством ADOCOnnection+ADOQuery+DataSource+A DOTable
+GRID.

Сделал (интересно же ) внесение в базу данных посредством вбивания необходимых значений в "Edit" и последующим нажиманием кнопки.

procedure TForm1.Button1Click(Sender: TObject);
begin
ADOQuery1.Insert;
ADOQuery1.FieldByName('client').AsS tring:=Edit1.Text;
ADOQuery1.FieldByName('Fiz.Kontakt' ).AsString:=Edit2.Text;
end;

Так вот. Почитал я на Вашем форуме несколько десятков тем, в которых утверждалось, что использование GRID - с MySQL -несколько "некультурно".

Прочитав, решил, что попробую с помощью элементов
ADOCOnnection+ADOQuery+DataSource сделать простенький запрос на считывание всей таблицы. Добавил к элементу ADOQuery в графу SQL
SELECT * FROM `bd`.`client_info` и теперь несколько не понимаю, куда его выводить(и главное как), если GRID лучше не использовать?

Что хотел вообще:
Программа представляла бы интерфейс вида:
10 заголовков, под ними открывается 10 пустых(новых) ячеек из таблицы Client_info.В них записываются необходимые данные, по нажатию кнопки "добавить". Я получаю сообщение -что данные успешно добавлены.. всё. собственно...

Если у кого то есть немножко времени объяснить -буду рад любым комментариям.
Phantosmagor вне форума Ответить с цитированием
Старый 15.03.2012, 15:47   #2
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Грид для вывода информации использовать не только можно, но и удобно))
А вот для добавления новых данных и редактирования, часто его возможностей бывает маловато.
Спокойно используйте DBGrid, для отображения данных, а для добавления и редактирования создайте отдельную форму.
vovk вне форума Ответить с цитированием
Старый 15.03.2012, 15:56   #3
Phantosmagor
Пользователь
 
Регистрация: 14.03.2012
Сообщений: 24
По умолчанию

Цитата:
Сообщение от vovk Посмотреть сообщение
...а для добавления и редактирования создайте отдельную форму.

Вот тут бы немножко подробнее... Форму на основе Editов создавать правильно? или есть более удобные методы?

Мне представлялось, что будет
10 заголовков, а под ними открывается 10 пустых(новых) ячеек из таблицы Client_info, в них вносятся все необходимые данные, жмётся кнопка "Добавить" . Вот как это реализовать не понимаю.

И может подскажете, на основе чего, я могу получить сообщение , что данные успешно добавлены и сохранены в MySQL ? или же НЕ добавлены, и НЕ сохранены?

Последний раз редактировалось Phantosmagor; 15.03.2012 в 16:05.
Phantosmagor вне форума Ответить с цитированием
Старый 15.03.2012, 16:20   #4
vovk
!=
Участник клуба
 
Аватар для vovk
 
Регистрация: 08.09.2008
Сообщений: 1,751
По умолчанию

Цитата:
Вот тут бы немножко подробнее... Форму на основе Editов создавать правильно? или есть более удобные методы?
Тут как удобно, если есть данные типа дата-время, то естественно эдит не очень удобен, смотрим на календарь и тп, в эдит также не запихнёш картинку, много строчный текст в эдите неудобно будет обрабатывать, то есть компоненты подбираете под тип данных.

Добавляете данные запросом, если нет ошибки, то в большинстве случаев всё в порядке.
Если хочется реакции, то можете завернутьвыполнение запроса на добавление в блок
try
except
и выводить сообщение вроде такого
Код:
.....
       try
            ADOQuery1.ExecSQL;
            Application.MessageBox('данные добавлены', 'всё в порядке',MB_ICONINFORMATION);
     except on E: Exception do
            Application.MessageBox(pwidechar(e.Message), 'всё пропало',MB_ICONERROR);
     end;
vovk вне форума Ответить с цитированием
Старый 19.03.2012, 09:29   #5
Phantosmagor
Пользователь
 
Регистрация: 14.03.2012
Сообщений: 24
Сообщение

Ещё раз -день добрый. Возобновил после небольшого перерыва ваяние данной програмки. Есть несколько вопросов, на которые я ответ так или иначе не нашёл...
1)Как корректно переносить запросы, чтобы небыло unterminated string? Не писать же как дикий человек всё в одну строку...
2)Хочу хранить в БД MySQL кириллические символы в полях,и по запросу из своей программы соответственно получить на экране именно кириллические символы. Не меняя ничего в настройках базы это реально сделать? или же необходимо в настройках ODBC ставить cp1251?
3) Глупый пожалуй вопрос, но, что лучше использовать для внесения больших объёмов текста ( т.е не 1-2 слова, а предложение)?
Я использую Edit, что то умнее не приходит в голову...


Вот мой маленький код,для внесения данных в базу , это к п.1...

Код:
 s := 'insert into client_info ( client_info.Date, Organization ) values( "'
 + DateToStr(DateTimePicker1.DateTime) + '","' + Edit1.Text + '"
 ,  "' + Edit2.Text + '" , "' + Edit3.Text + '", "' +Combobox1.Text + '"
,' "'+ Edit4.Text + '" ,"'+ Edit5.Text + '", "' + Combobox2.Text + '"  )';
Буду примного благодарен любым комментариям.

Последний раз редактировалось Phantosmagor; 19.03.2012 в 09:45.
Phantosmagor вне форума Ответить с цитированием
Старый 19.03.2012, 09:45   #6
rdama
Форумчанин
 
Аватар для rdama
 
Регистрация: 25.07.2009
Сообщений: 533
По умолчанию

По пункту 1. Смотрите что такое параметризированые запросы(запрос с параметром)
2. Можно посылать при подключении к БД запрос
Код:
SET NAMES CP1251
3. Посмотрите в сторону DBMemo
Маразм крепчал. Еноты пели...
R-style Dataknowlege Access Member Account (RDAMA)
rdama вне форума Ответить с цитированием
Старый 20.03.2012, 08:40   #7
Phantosmagor
Пользователь
 
Регистрация: 14.03.2012
Сообщений: 24
По умолчанию

Добрый день, надеюсь в последний раз, уважаемые форумчане. Всё сделал, кроме одного. в БД MySQL есть колонка "Date" , у него формат- DATE.

DateTimePicker , по дефолту выдаёт дату в формате dd-mm-yyyy , а чтобы превратить его в перевариваемую SQL дату (YYY-MM-DD) пол дня копал форумы, в результате пытался хоть одним из способов сделать - не получается. Программа упорно записывает в поле "Date" число в формате dd-mm-yyyy. Код - ниже


Код:
...
procedure TForm1.Button1Click(Sender: TObject);
var
s : String;
Dformat:String;

begin
DFormat:='YYYY-MM-DD';
DateTimePicker1.Perform(DTM_SETFORMAT, , DWORD(NIL) , DWORD(DFormat) );)
s := 'insert into client_info (Date) values("'+DateToStr(DateTimePicker1.DateTime)+'")';
.....
ADOQuery1.SQL.Text := s;
ADOQuery1.ExecSQL;


end;

end.
Буду благодарен за ОЦУ (особо ценные указания). Не выходит цветок аленький.

P.S Всё это делается для того, чтобы потом корректно делать выборку по дате.

т.к можно тупо присвоить колонке "Date" формат Char... и загонять как текст, но потом вот сортировка и поиск по дате-будет геморрой.
Phantosmagor вне форума Ответить с цитированием
Старый 20.03.2012, 08:51   #8
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Зачем над компонентом издеваться ?
Есть функция Format. Наконец, функция FormatDateTime.
Код:
  strD := FormatDateTime('yyyy-mm-dd', DateTimePicker1.Date); //strD : string;
Прик вне форума Ответить с цитированием
Старый 20.03.2012, 09:03   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
s := 'insert into client_info (Date) values("'+DateToStr(DateTimePicker1.DateTime)+'")';
"уж сколько раз твердили миру..."

Если не хотите проблем с датой - не вставляйте дату в текст запроса, НЕ ВСТАВЛЯЙТЕ!
Используйте ПАРАМЕТРЫ (параметрический запрос).
например,
Код:
ADOQuery1.Close;
ADOQuery1.SQL.Text := 'insert into client_info (Date) values( :pDate )';
ADOQuery1.SQL.Parameters.ParamByName('pDate').Value :=  DateTimePicker1.Date;
ADOQuery1.ExecSQL;

p.s. да и ещё. на будущее. по поводу имени поля date...
я крайне настойчиво рекомендую не использовать ключевые поля в именах полей, таблиц и т.д.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.03.2012, 09:12   #10
Phantosmagor
Пользователь
 
Регистрация: 14.03.2012
Сообщений: 24
По умолчанию

2 Прик - огромное спасибо, сразу помогло. Впредь буду интенсивнее изучать....
2 Serge_Bliznykov - по поводу поля Date - понял. Больше не буду использовать ключевые поля в именах таблиц. Большое спасибо.
Phantosmagor вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
string grid... ilushka2306 Помощь студентам 1 18.03.2011 23:32
Grid for TPanels ArtGrek Компоненты Delphi 7 20.02.2011 04:22
БД ADO Grid crit БД в Delphi 4 20.01.2011 23:13
Grid nimf Общие вопросы Delphi 2 22.04.2008 13:16
Help!Grid и Edit Дамир БД в Delphi 1 16.02.2007 02:05