Unit mi_rtl_ui_Dmxscroller_sql
Descrição
A unit mi_rtl_ui_Dmxscroller_sql
implementa a classe TUiDmxScroller_sql.
VERSÃO
Alpha - 1.0.0
CÓDIGO FONTE:
PENDÊNCIAS
T12 Falta implementar chave estrangeira em createTable;
T12 Em TUiDmxScroller_sql.DoOnNewRecord; está executando o método (CustomBufDataset as TSQLQuery).Append; antes do componenente TUiDmxScroller_sql está visível e isto está gerando exceção.
T12 ANÁLISE
[Estudar os procedimentos armazenados](https://www.w3schools.com/sql/sql_stored_procedures.asp)
[Estudar as restrições SQL](https://www.w3schools.com/sql/sql_constraints.asp)
Como saber se um campo é uma chave que liga outra tabela?
-
/*Não, podemos permitir que os registros das pessoas que possuim camisetas lavando sejam apagados, para garantir a integridade da informação. Para isso devemos utilizar o as chaves estrangeiras que acusarão um erro quando tentarmos deletar uma pessoa que possuir camisetas. Veja em código: */ CREATE TABLE Pessoa( IdPessoa INT NOT NULL PRIMARY KEY IDENTITY(1,1), Nome VARCHAR(20) NOT NULL ) CREATE TABLE Camiseta( IdCamiseta INT NOT NULL PRIMARY KEY IDENTITY(1,1), Descrição VARCHAR(20) NOT NULL, IdPessoa INT NOT NULL CONSTRAINT FK_Camiseta_Pessoa FOREIGN KEY(IdPessoa) REFERENCES Pessoa(IdPessoa) ) INSERT INTO Pessoa VALUES ('HeyJoe') INSERT INTO Pessoa VALUES ('Caique') INSERT INTO Camiseta VALUES ('Azul', 1) INSERT INTO Camiseta VALUES ('Amarela', 1) INSERT INTO Camiseta VALUES ('Preta', 2) SELECT * FROM Pessoa, Camiseta WHERE Pessoa.IdPessoa = Camiseta.IdPessoa
-
Como saber o tipo de relacionamento que os campos de outra tabela tem com a tabela atual?
T12 A opção CreateTable está dando mensagem de erro quando a coluna já existe.
Encontrar uma forma de não gerar exceção ou ignorar as exceções nesta rotina.
T12 Em TUiDmxScroller_sql.AlterTable checar:
T12 Criar código para todos os tipos reconhecidos por marIcaraí.
T12 Debugar para saber se está tudo funcionando.
T12 Permitir adicionar uma nova coluna mesmo que a tabela já exista.
T12 Em SetTableName(aTableName:String) criticar o nome aTableName é um nome válido para a tabela.
HISTÓRICO
Criado por: Paulo Sérgio da Silva Pacheco paulosspacheco@yahoo.com.br) ✅
2022-03-13
09:00
T12 Implementar a criação de código SQL baseado nos dados de TUiDmxScroller.
ANÁLISE:
Onde pegar o nome da tabela ou consulta? ✅
TUiDmxScroller.CustomBufDataset.FileName;
Onde pegar o nome dos campos da tabela CustomBufDataset.Filename? ✅
A lista de campos encontra-se em : TUiDmxScroller_Atributos.Fields : TFPList;
Como saber se TUiDmxScroller é uma tabela ou a uma consulta?
Se todos os TUiDmxScroller_Atributos.Fields[].FieldName não contém '|' é porque é FileName é uma tabela. ✅
Se pelo menos um TUiDmxScroller_Atributos.Fields[].FieldName contém '|' é porque é FileName é uma consulta envolvendo mais de uma tabela. ✅
Como saber se uma tabela ou consulta existe do banco de dados?
O SQL do postegres e do sqlite3 tem a clausula IN NOT EXISTS no comando CREATE TABLE:
EXEMPLO:
CREATE TABLE IF NOT EXISTS TEST01 (); ✅
REFERÊNCIAS
-
(PostgresSQL aceita 160 das 169 especificação 2016)(https://www.postgresql.org/docs/12/features.html)
[Comparativo entre os bancos de dados x conformidade SQL](https://en.wikipedia.org/wiki/SQL_compliance)
[Clientes de bancos de dados opensource](https://medevel.com/17-sql-client-open-source/)
Instalei programa cliente SQL DBeaver
Obs: Não deu certo. Ele é escrito em java e não funcionou o básico.
[sqlite create database if not exists](https://www.codegrepper.com/code-examples/sql/sqlite+create+database+if+not+exists)
-
2022-03-14
08:22
T12 Criar a unit mi_ui_Dmxscroller_sql.pas com a classe TUiDmxScroller_sql com objetivo de concentrar a integração do TDmxScroller com o componente TSQLQuery ✅
20:00
T12 Na Construção de TFields atualizar a propriedade TField.ProviderFlags com o tipo de acesso definido em TDmxFieldRec.Access ✅
21:12
T12 Criar propriedade TableName ✅
21:27
T12 Criar Function SetSqlCustomBufDataset:Boolean;Virtual;
CustomBufDataset.SQL := SELECT * FROM X onde X será definido pela propriedade TableName ✅
2022-03-15
09:11
Depurar o que fiz ontem para fazer funciona a atualização do banco de dados SQL. ✅
11:36
Criar método TUiDmxScroller_sql.AlterTable : Boolean; ✅
14:38
T12 Atualizar TSQLQury.TFields.ProviderFlags com TUiDmxScroller.MiProviderFlags ✅
2022-03-16
16:23
T12 Em TUiDmxScroller_sql.CreateCustomBufDataset_FieldDefs, atualizar TField.ProviderFlags com os dados do campo TDmxFieldRec.ProviderFlags. ✅
16:54
Em TUiDmxScroller_sql.AlterTable usar os flags TDmxFieldRec.ProviderFlags para criação da tabela. ✅
2022-03-17
10:48
T12 Os flags indicando que se trata de chave primária não está sendo atualizado em createStructor, por isso não está criando a chave primária. ✅
2022-03-18
10:40
T12 Ao criar uma tabela SQL em AlterTable adicionar colunas ao invés de criar a tabela toda. ✅
Motivo:
Permitir que o banco de dados fique compatível com o Template.
Alterar um coluna de forma automática não é bom, porque o que está feito gera dependências que produzirão erros ao fazer essas alterações.
2022-03-21
08:57
T12 Criar function SQL_AddkeysPrimaryKeyComposite(I : Integer):Boolean; ✅
Esta função adiciona chave primária composta na tabela.
REFERÊNCIA
[Como adiconar chave primaria usando a expressão ALTER TABLE](https://www.techonthenet.com/postgresql/primary_keys.php#:˜:text=In%20PostgreSQL%2C%20a%20primary%20key%20is%20created%20using%20either%20a,or%20drop%20a%20primary%20key.)
15:40
T12 Em AlterTable criar a restrição de chave estrangeira no TDmxScroller_sql. ✅
Nome da função: function AddKeyForeigns(I : Integer):Boolean;
2022-03-22
09:00
T12 Documentar as units TuiTypes e TUIConsts. ✅
10:00
T12 Criar os relacionamentos entre tabelas (restrições entre tabelas) ✅
14:14
T12 Depurar os relacionamentos entre tabelas. ✅
18:47
O Componente CustomBufDataset não está entrando no modo edit. ✅
O problema estava nos eventos TScrollBoxDMX.DoOnEnter e TScrollBoxDMX.DoOnExit;]
2022-03-22
20:27
T12 Analisar como criar os comandos CmIncluir, cmAlterar, cmExcluir, cmConsulta para a tabela TDmxScroller
Criar os comandos: ✅
Public Procedure DoOnNewRecord;overload;override; //Usado para inicializa os parametros de um novo registro
Public Procedure PutRec;Override;//Grava o buffer no arquivo memo
Public Procedure GetRec;Override;//O primeiro registro esta gravado em Value
Public Function DeleteRec:Boolean;Override;
Function UpdateRec: Boolean;Override;
Function UpdateRec_if_RecordAltered:Boolean;Override;
Function PrevRec : Boolean;overload;override;
Function NextRec : Boolean;overload;override;
2022-03-23
Criar método Public Function AddRec:Boolean;Override; ✅
Para que DoAddrec possa adicionar o registro é necessário que o registro esteja selecionando, ou seja no modo edit.
Obs: Está com problema.
2022-03-25
2022-03-28
Em TUiDmxScroller_sql.DoOnNewRecord; está executando o método (CustomBufDataset as TSQLQuery).Append; antes do componenente TUiDmxScroller_sql está visível e isto está gerando exceção. -
2022-03-30
Implementar a conexão com o banco de dados usando o componente Mi_Application.
2022-04-14
Debugar o método TUiDmxScroller_sql.AlterTable.
2022-04-15
O método TUiDmxScroller_sql.AlterTable precisa reconhecer a sintaxe do banco de dados selecionado.
O postgresSQL sintaxe:
CREATE TABLE [IF NOT EXISTS] table_name ( column1 datatype(length) column_contraint, column2 datatype(length) column_contraint, column3 datatype(length) column_contraint, table_constraints );
REFERÊNCIA
[postgresql-create-table](https://www.postgresqltutorial.com/postgresql-tutorial/postgresql-create-table/)
O sqLite3 sintaxe:
CREATE TABLE [IF NOT EXISTS] [schema_name].table_name ( column_1 data_type PRIMARY KEY, column_2 data_type NOT NULL, column_3 data_type DEFAULT 0,table_constraints) [WITHOUT ROWID];
REFERÊNCIA:
[sqlite-create-table](https://www.sqlitetutorial.net/sqlite-create-table/)
Uses
- Classes
- SysUtils
- BufDataset
- db
- SqlDb
- mi.rtl.Types
- mi_rtl_ui_types
- mi_rtl_ui_consts
- mi_rtl_ui_Dmxscroller
- umi_rtl_ui_custom_application
Visão Geral
Classes, Interfaces, Objetos e Registros
Nome | Descrição |
---|---|
Classe TDmxScroller_sql_Atributos |
|
Classe TUiDmxScroller_sql |
Gerado por PasDoc 0.16.0.