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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2010, 22:19   #1
ulala
Пользователь
 
Аватар для ulala
 
Регистрация: 18.09.2009
Сообщений: 62
Печаль Помещать поля таблицы БД в MEMO

Всем Привет!
У меня задание создать клиентское положение для больницы. Программа сложная, трудности начались с самого начала Возможно вопросов будет много. Но пока что только 1.
По щелчку в DBGrid (там отображается ФИО пациентов) в Memo должен отображаться адрес и телефон этого пациента.
Вот
Код:
procedure TForm1.DBGrid2CellClick(Column: TColumn);
begin
ADOQuery5.Active:=False;
ADOQuery5.Close;
ADOQuery5.SQL.Clear;
ADOQuery5.SQL.Add('SELECT * FROM Patient');
ADOQuery5.Open;
ADOQuery5.Active:=True;
Memo4.Lines.Add(ADOQuery5.FieldByName('Sity').AsString);
Memo4.Lines.Add(ADOQuery5.FieldByName('Street').AsString);
Memo4.Lines.Add(ADOQuery5.FieldByName('Home').AsString);
Memo4.Lines.Add(ADOQuery5.FieldByName('Kv').AsString);
Memo4.Lines.Add(ADOQuery5.FieldByName('P_Kont_Phone').AsString);
end;
Но у меня отображается в Memo только запись которая в акцессе в таблице первая записана. А их там 25 штук разных адресов, при каждом щелчке на другом пациенте должен отбражаться его адрес. Что делать ?
Ну,как?.. Твоё коллективное сознание уловило Message или ты по-прежнему считаешь себя Избранным?..
ulala вне форума Ответить с цитированием
Старый 23.10.2010, 22:24   #2
fbus
Форумчанин
 
Аватар для fbus
 
Регистрация: 23.10.2008
Сообщений: 460
По умолчанию

нужно использовать событие DBGrid'a OnCellClick
и по нему выполнять
Код:
Memo4.Lines.Add(ADOQuery5.FieldByName('Sity').AsString);
Memo4.Lines.Add(ADOQuery5.FieldByName('Street').AsString);
Memo4.Lines.Add(ADOQuery5.FieldByName('Home').AsString);
Memo4.Lines.Add(ADOQuery5.FieldByName('Kv').AsString);
Memo4.Lines.Add(ADOQuery5.FieldByName('P_Kont_Phone').AsString);
все что лишнее - убирай и будет тебе счастье.
можешь написать мне в аську, я могу тебе весь проект сделать

З.Ы. Не забудь перед этим очистить поле
Memo4.Clear;
fbus вне форума Ответить с цитированием
Старый 23.10.2010, 22:34   #3
ulala
Пользователь
 
Аватар для ulala
 
Регистрация: 18.09.2009
Сообщений: 62
По умолчанию

Если убирать
Код:
ADOQuery5.Active:=False;
ADOQuery5.Close;
ADOQuery5.SQL.Clear;
ADOQuery5.SQL.Add('SELECT * FROM Patient');
ADOQuery5.Open;
ADOQuery5.Active:=True;
То будет вылетать, запроса же не будет тогда, будет ругаться "поле "Sity" not found"... я сначала так и написала безо всего, начиная со слов Memo4.Lines.Add

Засунула
Код:
ADOQuery5.Active:=False;
ADOQuery5.Close;
ADOQuery5.SQL.Clear;
ADOQuery5.SQL.Add('SELECT * FROM Patient');
ADOQuery5.Open;
ADOQuery5.Active:=True;
в OnFormCreate, всё равно отображает тока 1ую запись... Просто в БД 4 связанных таблицы, может изза этого не работает. Послндняя лаба - всегда *опа)

А может можно сделать так чтобы в DBGrid не все поля отражались которые мы выбираем с помощью ADOQuery? Потому что если в ADOQuery (в том который связан с DBGrid )писать select sity, street и всё остальное то всё переключается и отображается в Memo нормально. Но сказано по заданию в DBGrid не включать эти поля, так можно их можно как-либо скрыть?
Ну,как?.. Твоё коллективное сознание уловило Message или ты по-прежнему считаешь себя Избранным?..

Последний раз редактировалось Stilet; 24.10.2010 в 14:15.
ulala вне форума Ответить с цитированием
Старый 23.10.2010, 23:54   #4
ulala
Пользователь
 
Аватар для ulala
 
Регистрация: 18.09.2009
Сообщений: 62
По умолчанию

Вот текст программы:
Код:
unit LAB8Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, DB, ADODB, Buttons, Grids, DBGrids;
 
type
  TForm1 = class(TForm)
    Label1: TLabel;
    Label2: TLabel;
    Edit1: TEdit;
    DBGrid1: TDBGrid;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Edit2: TEdit;
    Label8: TLabel;
    Edit3: TEdit;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Edit4: TEdit;
    Memo1: TMemo;
    Label12: TLabel;
    Memo2: TMemo;
    Label13: TLabel;
    Memo3: TMemo;
    Label14: TLabel;
    Label15: TLabel;
    Memo4: TMemo;
    DBGrid2: TDBGrid;
    BitBtn1: TBitBtn;
    BitBtn2: TBitBtn;
    ADOConnection1: TADOConnection;
    ADOQuery1: TADOQuery;
    DataSource1: TDataSource;
    ADOQuery2: TADOQuery;
    DataSource2: TDataSource;
    ADOQuery3: TADOQuery;
    DataSource3: TDataSource;
    ADOQuery4: TADOQuery;
    DataSource4: TDataSource;
    ADOQuery5: TADOQuery;
    DataSource5: TDataSource;
    ComboBox1: TComboBox;
    procedure FormActivate(Sender: TObject);
    procedure DBGrid2CellClick(Column: TColumn);
    procedure DBGrid1CellClick(Column: TColumn);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
implementation
 
{$R *.dfm}
 
procedure TForm1.FormActivate(Sender: TObject);
begin
ADOQuery1.Active:=False;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT D_Sname, D_Name, D_PhName, Special, D_KontPhone, KabNum, Graph');
ADOQuery1.SQL.Add('FROM Doctor');
ADOQuery1.Open;
ADOQuery1.Active:=True;
 
ADOQuery4.Active:=False;
ADOQuery4.SQL.Clear;
ADOQuery4.SQL.Add('SELECT P_Sname, P_Name, P_PhName, Sity, Street, Home, Kv, P_Kont_Phone, birdts_year, birdts_day');
ADOQuery4.SQL.Add('FROM Patient');
ADOQuery4.Open;
ADOQuery4.Active:=True;
 
ADOQuery5.Active:=False;
ADOQuery5.SQL.Clear;
ADOQuery5.SQL.Add('SELECT * FROM Patient P');
ADOQuery5.Open;
 
end;
 
procedure TForm1.DBGrid2CellClick(Column: TColumn);
begin
{ADOQuery5.Active:=False;
ADOQuery5.SQL.Clear;
ADOQuery5.SQL.Add('SELECT P_Sname, Sity, Street, Home, Kv, P_Kont_Phone');
ADOQuery5.SQL.Add('FROM Patient P');
ADOQuery5.Active:=True;}
 
{ADOQuery5.First;
while not ADOQuery5.Eof
do begin}
//Memo4.Clear;
Memo4.Lines.Add(ADOQuery4.FieldByName('Sity').AsString) ;
Memo4.Lines.Add(ADOQuery4.FieldByName('Street').AsString);
Memo4.Lines.Add(ADOQuery4.FieldByName('Home').AsString);
Memo4.Lines.Add(ADOQuery4.FieldByName('Kv').AsString);
Memo4.Lines.Add(ADOQuery4.FieldByName('P_Kont_Phone').AsString);
Label5.Caption:=ADOQuery4.FieldByName('P_Sname').AsString;
//ADOQuery5.Next;
   end;
//end;
 
procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
ADOQuery2.Active:=False;
ADOQuery2.SQL.Clear;
ADOQuery2.SQL.Add('SELECT Graph');
ADOQuery2.SQL.Add('FROM Doctor');
ADOQuery2.Active:=True;
Label4.Caption:=ADOQuery1.FieldByName('D_Sname').AsString+' '+ADOQuery1.FieldByName('D_Name').AsString+' '+ADOQuery1.FieldByName('D_PhName').AsString;
Edit1.Text:=ADOQuery1.FieldByName('Graph').AsString;
end;
 
end.
т.е. ADOQuery1 и ADOQuery4 у меня связаны с DBGrid-ами, ADOQuery2 и ADOQuery5 являются "вспомогательными", через них надо всё в Memo записывать... но вот не получается. А с ADOQuery1 и ADOQuery4 получается, но там нужно скрыть несколько полей....
Ну,как?.. Твоё коллективное сознание уловило Message или ты по-прежнему считаешь себя Избранным?..
ulala вне форума Ответить с цитированием
Старый 24.10.2010, 00:16   #5
fbus
Форумчанин
 
Аватар для fbus
 
Регистрация: 23.10.2008
Сообщений: 460
По умолчанию

должно работать как я написал

Цитата:
procedure TForm1.DBGrid2CellClick(Column: TColumn);
begin
{ADOQuery5.Active:=False;
ADOQuery5.SQL.Clear;
ADOQuery5.SQL.Add('SELECT P_Sname, Sity, Street, Home, Kv, P_Kont_Phone');
ADOQuery5.SQL.Add('FROM Patient P');
ADOQuery5.Active:=True;}

{ADOQuery5.First;
while not ADOQuery5.Eof
do begin}
//Memo4.Clear;
Memo4.Lines.Add(ADOQuery4.FieldByNa me('Sity').AsString) ;
Memo4.Lines.Add(ADOQuery4.FieldByNa me('Street').AsString);
Memo4.Lines.Add(ADOQuery4.FieldByNa me('Home').AsString);
Memo4.Lines.Add(ADOQuery4.FieldByNa me('Kv').AsString);
Memo4.Lines.Add(ADOQuery4.FieldByNa me('P_Kont_Phone').AsString);
Label5.Caption:=ADOQuery4.FieldByNa me('P_Sname').AsString;
//ADOQuery5.Next;
end;
//end;
а ниче что запрос ты пишешь к адо 5 а выводишь из четвертой?)))) внимательнее все смотри, если что стучи в аську

Последний раз редактировалось Stilet; 24.10.2010 в 14:16.
fbus вне форума Ответить с цитированием
Старый 24.10.2010, 12:50   #6
ulala
Пользователь
 
Аватар для ulala
 
Регистрация: 18.09.2009
Сообщений: 62
По умолчанию

С этим справились. Настигла ещё одна проблема. По заданию нужно заносить из Edit'ов и Memo'в в таблицу в Акцессе всё что доктор туда напишет, а также ID доктора и пациента. В БД 4 связанные таблицы (на картинке схема данных).
Как с ними работать мне никто не объяснял, погуглила, кое-что нашла, но конечно же ничего не работает.
Вот что у меня примерно получилось:
Код:
procedure TForm1.BitBtn1Click(Sender: TObject); {зарегистрировать приём}
begin
ADOQuery4.Active:=False;
ADOQuery4.SQL.Clear;
ADOQuery4.SQL.Add('INSERT INTO Visit');
ADOQuery4.SQL.Add('VisitDate, VisitTime,Resultat,Symptoms,Diagnos');
ADOQuery4.SQL.Add('VALUES("'+Edit2.Text+'", "'+Edit3.Text+'", "'+ComboBox1.SelText+'", "'+Memo1.Lines+'", "'+Memo2.Lines+'", "'+Memo3.Lines+'");
ADOQuery4.SQL.Add('WHERE (D.ID_Doctor=V.ID_Doctor) AND P.ID_Patient=V.ID_Patient');
ADOQuery4.ExecSQL;
end;
Подсвечивает "'+Memo1.Lines+'", говорит "Incompatible types: 'String' and 'TStrings' ". А у меня там ещё и ComboBox... Как эту процедуру правильно записать?
Изображения
Тип файла: png shema.png (21.3 Кб, 21 просмотров)
Ну,как?.. Твоё коллективное сознание уловило Message или ты по-прежнему считаешь себя Избранным?..
ulala вне форума Ответить с цитированием
Старый 24.10.2010, 13:02   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Код:
Memo1.Lines.Text
Пробуй.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.10.2010, 13:07   #8
ulala
Пользователь
 
Аватар для ulala
 
Регистрация: 18.09.2009
Сообщений: 62
По умолчанию

Сделала, запустилось, но теперь ругается "ошибка синтаксиса в инструкции INSERT INTO"
Это наверняка изза связей, вот изза этого:
Код:
ADOQuery4.SQL.Add('WHERE (D.ID_Doctor=V.ID_Doctor) AND P.ID_Patient=V.ID_Patient');
Вложения
Тип файла: zip Проектир_ИС_лаб.zip (436.1 Кб, 5 просмотров)
Ну,как?.. Твоё коллективное сознание уловило Message или ты по-прежнему считаешь себя Избранным?..
ulala вне форума Ответить с цитированием
Старый 24.10.2010, 14:17   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Именно ))
В INSERT нет предложения WHERE.
Убери его вообще, ибо эта команда по любому добавляет одну запись в конец таблицы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.10.2010, 14:39   #10
ulala
Пользователь
 
Аватар для ulala
 
Регистрация: 18.09.2009
Сообщений: 62
По умолчанию

Код:
procedure TForm1.BitBtn1Click(Sender: TObject); {зарегистрировать приём}
begin
ADOQuery4.Active:=False;
ADOQuery4.SQL.Clear;
ADOQuery4.SQL.Add('INSERT INTO Visit');
ADOQuery4.SQL.Add('ID_Doctor, ID_Patient, VisitDate, VisitTime,Resultat,Symptoms,Diagnos');
ADOQuery4.SQL.Add('VALUES('+Doctor.FieldByName('ID_Doctor').AsInteger
+', '+Patient.FieldByName('ID_Patient').AsInteger+','+'"'+Edit2.Text+'", "'+Edit3.Text
+'", "'+ComboBox1.Text+'", "'+Memo1.Lines.Text+'", "'+Memo2.Lines.Text+'")');
ADOQuery4.ExecSQL;
end;
Вот что получилось, но теперь не импортируется ID_Doctor из таблицы Doctor, а ID_Patient из таблицы Patient, ругается что неизвестная переменная А в результирующей таблице Visit всё же должно быть написано првильно, т.е. доктор щёлкает на фамилии пациента, потом на своей фамилии, потом пишет в эдитах и мемо всё что доктор прописал, нажимает на кнопку "зарегистрировать приём"-и данные отправляются в Акцесс в таблицу Visit с айди доктора который был выбран и айди пациента который был выбран. Вот оно как.
Ну,как?.. Твоё коллективное сознание уловило Message или ты по-прежнему считаешь себя Избранным?..

Последний раз редактировалось Stilet; 24.10.2010 в 15:24.
ulala вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отобразить все поля DBGrid в Memo Krechet БД в Delphi 7 15.09.2010 18:28
просмотр поля Таблицы Anna_fors Компоненты Delphi 3 05.06.2009 15:16
DBGrid и поля с типом MEMO doncova1 БД в Delphi 4 27.03.2009 01:20
Изменение функции поля сводной таблицы Lal Microsoft Office Excel 3 05.03.2009 16:47
Отображение Аксесовского поля MEMO в DBMemo Pinya БД в Delphi 2 12.08.2008 09:20