Listar os dados de um campo de uma tabela em um TComboBox
Meus Prezados,
Tenho duas tabelas a seguir:
CREATE TABLE Editora (
ID INTEGER PRIMARY KEY AUTOINCREMENT
NOT NULL,
Nome TEXT (60) NOT NULL
);
e a outra
CREATE TABLE Livro (
ID INTEGER PRIMARY KEY AUTOINCREMENT
NOT NULL,
ID_Editora INTEGER REFERENCES Editora (ID) ON DELETE CASCADE
ON UPDATE CASCADE,
NomeHQ TEXT (80) NOT NULL,
Numero INTEGER,
Titulo TEXT (80),
Volume INTEGER
);
Preciso mostrar em um TComboBox o campo Nome da Tabela Editora no formulário
de cadastro de Livros(FrmCadastroLivros). Alguém pode me ajudar?
Usei o exemplo abaixo da internet mas esta dando erro no params (pNome).
Segue abaixo :
procedure TfrmCadastroLivro.FormActivate(Sender: TObject);
begin
inherited;
DmEditora.cdsEditora.Open;
DmEditora.cdsEditora.First;
while not DmEditora.cdsEditora.eof do
begin
ComboBox1.Items.Add(DmEditora.cdsEditoraNome.Value);
DmEditora.cdsEditora.Next;
end;
e no evento onChange do ComboBox:
procedure TfrmCadastroHQ.ComboBox1Change(Sender: TObject);
begin
inherited;
with DmEditora.sqlEditora do
begin
Close;
sql.Clear;
sql.Add('Select *From Editora where Nome = pNome');
ParamByName('PNome').AsString := ComboBox1.Text;
Open;
end;
end;
Alguém pode me ajudar? Agradeço desde já.
end;
Tenho duas tabelas a seguir:
CREATE TABLE Editora (
ID INTEGER PRIMARY KEY AUTOINCREMENT
NOT NULL,
Nome TEXT (60) NOT NULL
);
e a outra
CREATE TABLE Livro (
ID INTEGER PRIMARY KEY AUTOINCREMENT
NOT NULL,
ID_Editora INTEGER REFERENCES Editora (ID) ON DELETE CASCADE
ON UPDATE CASCADE,
NomeHQ TEXT (80) NOT NULL,
Numero INTEGER,
Titulo TEXT (80),
Volume INTEGER
);
Preciso mostrar em um TComboBox o campo Nome da Tabela Editora no formulário
de cadastro de Livros(FrmCadastroLivros). Alguém pode me ajudar?
Usei o exemplo abaixo da internet mas esta dando erro no params (pNome).
Segue abaixo :
procedure TfrmCadastroLivro.FormActivate(Sender: TObject);
begin
inherited;
DmEditora.cdsEditora.Open;
DmEditora.cdsEditora.First;
while not DmEditora.cdsEditora.eof do
begin
ComboBox1.Items.Add(DmEditora.cdsEditoraNome.Value);
DmEditora.cdsEditora.Next;
end;
e no evento onChange do ComboBox:
procedure TfrmCadastroHQ.ComboBox1Change(Sender: TObject);
begin
inherited;
with DmEditora.sqlEditora do
begin
Close;
sql.Clear;
sql.Add('Select *From Editora where Nome = pNome');
ParamByName('PNome').AsString := ComboBox1.Text;
Open;
end;
end;
Alguém pode me ajudar? Agradeço desde já.
end;
Mauricio Bomfim
Curtidas 0
Respostas
Alan
28/10/2023
Meus Prezados,
Tenho duas tabelas a seguir:
CREATE TABLE Editora (
ID INTEGER PRIMARY KEY AUTOINCREMENT
NOT NULL,
Nome TEXT (60) NOT NULL
);
e a outra
CREATE TABLE Livro (
ID INTEGER PRIMARY KEY AUTOINCREMENT
NOT NULL,
ID_Editora INTEGER REFERENCES Editora (ID) ON DELETE CASCADE
ON UPDATE CASCADE,
NomeHQ TEXT (80) NOT NULL,
Numero INTEGER,
Titulo TEXT (80),
Volume INTEGER
);
Preciso mostrar em um TComboBox o campo Nome da Tabela Editora no formulário
de cadastro de Livros(FrmCadastroLivros). Alguém pode me ajudar?
Usei o exemplo abaixo da internet mas esta dando erro no params (pNome).
Segue abaixo :
procedure TfrmCadastroLivro.FormActivate(Sender: TObject);
begin
inherited;
DmEditora.cdsEditora.Open;
DmEditora.cdsEditora.First;
while not DmEditora.cdsEditora.eof do
begin
ComboBox1.Items.Add(DmEditora.cdsEditoraNome.Value);
DmEditora.cdsEditora.Next;
end;
e no evento onChange do ComboBox:
procedure TfrmCadastroHQ.ComboBox1Change(Sender: TObject);
begin
inherited;
with DmEditora.sqlEditora do
begin
Close;
sql.Clear;
sql.Add('Select *From Editora where Nome = pNome');
ParamByName('PNome').AsString := ComboBox1.Text;
Open;
end;
end;
Alguém pode me ajudar? Agradeço desde já.
end;
Tenho duas tabelas a seguir:
CREATE TABLE Editora (
ID INTEGER PRIMARY KEY AUTOINCREMENT
NOT NULL,
Nome TEXT (60) NOT NULL
);
e a outra
CREATE TABLE Livro (
ID INTEGER PRIMARY KEY AUTOINCREMENT
NOT NULL,
ID_Editora INTEGER REFERENCES Editora (ID) ON DELETE CASCADE
ON UPDATE CASCADE,
NomeHQ TEXT (80) NOT NULL,
Numero INTEGER,
Titulo TEXT (80),
Volume INTEGER
);
Preciso mostrar em um TComboBox o campo Nome da Tabela Editora no formulário
de cadastro de Livros(FrmCadastroLivros). Alguém pode me ajudar?
Usei o exemplo abaixo da internet mas esta dando erro no params (pNome).
Segue abaixo :
procedure TfrmCadastroLivro.FormActivate(Sender: TObject);
begin
inherited;
DmEditora.cdsEditora.Open;
DmEditora.cdsEditora.First;
while not DmEditora.cdsEditora.eof do
begin
ComboBox1.Items.Add(DmEditora.cdsEditoraNome.Value);
DmEditora.cdsEditora.Next;
end;
e no evento onChange do ComboBox:
procedure TfrmCadastroHQ.ComboBox1Change(Sender: TObject);
begin
inherited;
with DmEditora.sqlEditora do
begin
Close;
sql.Clear;
sql.Add('Select *From Editora where Nome = pNome');
ParamByName('PNome').AsString := ComboBox1.Text;
Open;
end;
end;
Alguém pode me ajudar? Agradeço desde já.
end;
with DmEditora.sqlEditora do begin Close; sql.Clear; sql.Add('Select *From Editora where Nome = :pNome'); ParamByName('PNome').AsString := ComboBox1.Text; Open; end; end;
Quando você passa um parâmetro,precisa dos dois pontos,tente conforme te mandei .
GOSTEI 0
Arthur Heinrich
28/10/2023
A maioria dos componentes que possuem listas, como no caso do ComboBox, possui internamente um TStringList ou uma variação deste.
Este componente contém, internamente, dois arrays, sendo um para armazenar o texto e outro para armazenar um object. Dá para fazer uma gambiarra e armazenar o "id" da editora, que é um inteiro, na propriedade do objeto. Assim, ao selecionar um item no combobox, você teria acesso ao "id" também.
A rotina acima precisa armazenar um TObject (uma referência/pointer para a instância). Ao invés disso, estamos utilizando um cast para interpretar o "id" inteiro como um TObject, permitindo assim que o "ID" seja armazenado no array de objetos.
Para acessar um "ID", você utilizaria:
Aqui, novamente, acessamos um TObject que se supõe ser um ponteiro para uma instância do objeto, o que não é verdade. Então, fazemos um cast para transformar a referência ao objeto em um inteiro, que representa o "ID" da editora.
Este componente contém, internamente, dois arrays, sendo um para armazenar o texto e outro para armazenar um object. Dá para fazer uma gambiarra e armazenar o "id" da editora, que é um inteiro, na propriedade do objeto. Assim, ao selecionar um item no combobox, você teria acesso ao "id" também.
while not DmEditora.cdsEditora.eof do begin ComboBox1.Items.AddObject(DmEditora.cdsEditora.FieldByName('nome').AsString, TObject(DmEditora.cdsEditora.FieldByName('id').AsInteger)); DmEditora.cdsEditora.Next; end;
A rotina acima precisa armazenar um TObject (uma referência/pointer para a instância). Ao invés disso, estamos utilizando um cast para interpretar o "id" inteiro como um TObject, permitindo assim que o "ID" seja armazenado no array de objetos.
Para acessar um "ID", você utilizaria:
ID := Integer(ComboBox1.Objects[ComboBox1.ItemIndex]);
Aqui, novamente, acessamos um TObject que se supõe ser um ponteiro para uma instância do objeto, o que não é verdade. Então, fazemos um cast para transformar a referência ao objeto em um inteiro, que representa o "ID" da editora.
GOSTEI 0