| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > связать dbgrid с бд с помощью хранимой процедуры |
| Автор: Anatom 22.3.2009, 23:42 |
| Здравствуйте у меня такая ситуация, я dbgrid вывожу данные из двух табл с помощью представления: CREATE VIEW dbo.VIEW1 AS SELECT dbo.[заказ билета].*, dbo.билет.[№билета] AS [№билета], dbo.билет.[№рейса] AS [№рейса], dbo.билет.[id место отправления] AS [id место отправления], dbo.билет.[дата отправления] AS [дата отправления], dbo.билет.[id место прибытия] AS [id место прибытия], dbo.билет.[дата прибытия] AS [дата прибытия], dbo.билет.[id тип вагона] AS [id тип вагона], bo.билет.[номер места] AS [номер места] FROM dbo.билет INNER JOINbo.[заказ билета] ON dbo.билет.[№паспорта] = dbo.[заказ билета].[№паспорта] AND dbo.билет.[№паспорта] = dbo.[заказ билета].[№паспорта] все выводиться классно, но возникают проблемы когда начинаю вносить в дбгрид для этого я использую хранимую процедуру: procedure TForm1.Button5Click(Sender: TObject); begin ADOStoredProc1.Parameters.ParamByName('@FIO').Value:=AdoTable2.FieldByName('ФИО').Value; ADOStoredProc1.Parameters.ParamByName('@№pasporta').Value:=AdoTable2.FieldByName('№паспорта').Value; ADOStoredProc1.Parameters.ParamByName('@telefon').Value:=AdoTable2.FieldByName('телефон').Value; ADOStoredProc1.Parameters.ParamByName('@firma').Value:=AdoTable2.FieldByName('название фирмы').Value; ADOStoredProc1.Parameters.ParamByName('@mestootp').Value:=AdoTable2.FieldByName('id место отправления').Value; ADOStoredProc1.Parameters.ParamByName('@mestoprib').Value:=AdoTable2.FieldByName('id место прибытия').Value; ADOStoredProc1.Parameters.ParamByName('@tipvagona').Value:=AdoTable2.FieldByName('id тип вагона').Value; ADOStoredProc1.Parameters.ParamByName('@nomerbilet').Value:=AdoTable2.FieldByName('№билета').Value; ADOStoredProc1.Parameters.ParamByName('@nomerreisa').Value:=AdoTable2.FieldByName('№рейса').Value; ADOStoredProc1.Parameters.ParamByName('@nomermesta').Value:=AdoTable2.FieldByName('номер места').Value; ADOStoredProc1.Parameters.ParamByName('@otprav').Value:=AdoTable2.FieldByName('дата отправления').Value; ADOStoredProc1.Parameters.ParamByName('@prib').Value:=AdoTable2.FieldByName('дата прибытия').Value; ADOStoredProc1.Parameters.ParamByName('@poriadok').Value:=AdoTable2.FieldByName('порядковый № вагона').Value; ADOStoredProc1.Parameters.ParamByName('@nomerpoezda').Value:=AdoTable2.FieldByName('№поезда').Value; ADOStoredProc1.ExecProc; ADOTable2.Close; ADOTable2.Open; end; и процедура на sql :alter procedure ADOStoredProc1 @FIO varchar(60), @telefon int, @nomerpasporta int, @firma varchar(40), @nomerbilet int, @nomerreisa int, @mestootp int, @mestoprib int, @otprav datetime, @prib datetime, @tipvagona int, @nomermesta int, @poriadok int, @nomerpoezda int as insert into [заказ билета] ([ФИО],[телефон], [№паспорта], [название фирмы]) values (@FIO,@telefon,@nomerpasporta,@firma) insert into [билет] ([№билета],[№паспорта],[№рейса],[id место отправления],[id место прибытия],[дата отправления],[дата прибытия],[id тип вагона], [номер места],[порядковый№ вагона],[№поезда]) values (@nomerbilet,@nomerpasporta,@nomerreisa,@mestootp,@mestoprib,@otprav,@prib,@tipvagona,@nomermesta,@poriadok,@nomerpoezda) go может я что-то не правильно написал подскажите пожалуйста? |
| Автор: Данкинг 23.3.2009, 00:10 |
Какие проблемы-то? |
| Автор: Dmi3ev 23.3.2009, 00:28 |
| Anatom, отформатируй все нормально (с помощью кнопки код), потом проблему свою освети получше... тогда и поговорим... |
| Автор: Anatom 23.3.2009, 17:15 |
| при запуске процедуры в QA он выдает мне следующюю ошибку: INSERT statement conflicted with COLUMN FOREIGN KEY constraint 'FK_билет_рейсы'. The conflict occurred in database 'gd', table 'рейсы', column '№рейса'. The statement has been terminated. И еще я хотел спросить правильно ли я вообще сделал процедуру, код дв делфи? |
| Автор: pseud 23.3.2009, 17:21 | ||||||
форматирование поста Anatom:
|
| Автор: Anatom 23.3.2009, 17:38 |
| Akella, но у меня же есть такая табл рейсы в которой есть одно поле №рейса. pseud, спасибо я просто не знал как так красиво отредактироваровать |
| Автор: Anatom 23.3.2009, 18:02 |
| или я просто не могу вносить такие же данные как в этой табл? |
| Автор: Anatom 23.3.2009, 22:48 |
| с тем вопросом разобрался но столкнулся с другим когда пытаюсь внести данные в бдгрид у меня возникает такая ошибка. прикрепляю ее. встрял с этим вопросом помогите!!!! |
| Автор: Данкинг 23.3.2009, 23:12 |
Прочитать сообщение об ошибке пробовал? Получилось? Если нет (судя по всему), то перевожу с китайского: ты пытаешься вставить пустое (NULL значение) в поле, которое не допускает нулевых значений. |
| Автор: Akella 24.3.2009, 09:33 |
| Данкинг, да они просто не знают даже про онлайн переводчики. А легче ведь задать вопрос на форумах (скопипайстить) и пойти пить пиво, а утром прийти на работу и оппаа, а тут уже всё решили за меня умные парни, а мне типо и париццо не нужно. На таких форумах как sql.ru и ibase.ru таких пользователей ленивых просто тупо задрачивают (не побоюсь этого слова) и они туда больше не приходят. |
| Автор: Dobermann 24.3.2009, 10:02 | ||
а мы тут как няньки |
| Автор: Anatom 24.3.2009, 22:14 |
| Нет товарищи это не так, вы видили какой од я выкладывал выше, для вывода информацию в грид из двух табл я использую представление, правда я его сделал в конструкторе, и получаеться что в одну табл я могу заносить №паспорта, а во вторую не могу потому что оно не ключевой поле в этой табл, а в которую вношу оно явл ключем. мне сказали сделать процедуру для того чтобы можно было внести данные из грид сразу в обе табл, но это не помогло(процедуру проверял она работает и получаеться занести данные) а вот чтобы из делфи появляеться такая ошибка, мол я не могу занести пустое значение в табл, но на самом деле я его занес только в одну табл. скрин представления в конструкторе прилогаю |
| Автор: pseud 25.3.2009, 10:42 |
офф какие книжки учат давать русские имена таблицам/столбцам??? можно не отвечать, лучше сразу сжечь. |
| Автор: Frees 25.3.2009, 11:18 | ||
ОФФ
и они приходят сюда |
| Автор: Данкинг 25.3.2009, 12:00 |
Если СУБД допускает - так в чём проблема, собственно? ЗЫ: я русских имён никогда не даю, но не понимаю, почему народ этим возмущается. |
| Автор: Anatom 25.3.2009, 16:50 |
| В том то и дело я из грида во все свои табл С РУССКИМИ ИМЕНАМИ могу заносить данные а в эту табл не получаеться. вопрос когда я запускаю ехе, ввожу все данные (у меня нет пустых полей), а он ругаеться что поле №паспорта вводиться пустое значение. я и создал впринципе эту тему, потому что куда могут пропасть данные я не знаю, а вы меня за ламера считаете. |
| Автор: Anatom 25.3.2009, 23:02 |
| я сделал скрин из профайлер может тут что-нибудь подскажите |