Figure 1 Utilizar o SQL Server Enterprise Manager para explorar a base de dados Projecto1



Documentos relacionados
Bases de Dados 2007/2008. Aula 1. Referências

Exemplo25 Leitura de dados de arquivos txt. Passos para a elaboração da aplicação:

Universidade da Beira Interior. Sistemas Distribuídos /2015 Curso: Engª Informática. Folha 11. JAX-RS: Java API for RESTful Web Services

Iniciar o Data Adapter Configuration Wizard. Toolbox Data Duplo clique em OleDbDataAdapter. Botão next na caixa de diálogo

DSS 08/09. Camada de Dados - JDBC. Aula 1. António Nestor Ribeiro /António Ramires Fernandes/ José Creissac Campos {anr,arf,jfc}@di.uminho.

Computação Móvel 2007/2008

Linguagens de Programação

NOVO SISTEMA DE CORREIO ELETRONICO PARA OS DOMINIOS ic.uff.br & dcc.ic.uff.br

Criar uma aplicação JPA2 com EclipseLink e H2

Persistência de Classes em Tabelas de Banco de Dados

DSS 09/10. DSS 09/10 Que métodos é que fazem parte de cada camada? Aplicações Multi-camada JDBC. Aula 3 DSS 09/10

Criação de Applets Package: Class Name Base Class: Generate header comments: Can run standalone: Generate Standard methods:

1 Criar uma entity a partir de uma web application que usa a Framework JavaServer Faces (JSF)

Ficha prática nº 7. SGBD Microsoft Access e SQL Server

BD SQL Server. Licenciatura em Engenharia Informática e Computação. Bases de Dados 2003/04

hdd enclosure caixa externa para disco rígido

Aula 1 Acesso a Banco de Dados

Solutions for Information Technologies. BIS-Navegador. IBM DB2 UDB v8.x

Solutions for Information Technologies. BIS-Navegador. Manual de Instalação para Microsoft SQL Server

Easy Linux! FUNAMBOL FOR IPBRICK MANUAL. IPortalMais: a «brainware» company Manual

Capítulo 4. Programação em ASP

Métodos Formais em Engenharia de Software. VDMToolTutorial

Criação de Servlets Name Directory Build WAR JSP/Servlet frameworks Launch URL Package Class name Generate header comments

Findo o processo de normalização, obtemos o conjunto de tabelas indicado na tabela 1.28.

Serviços: API REST. URL - Recurso

Laboratório de Banco de Dados Aula 1 Acesso a Banco de Dados. Prof. Josenildo Silva jcsilva@ifma.edu.br

Prática em Laboratório N.04 (Parte 01) Criando uma aplicação composta a partir de um serviço Web

Acesso a Bancos de Dados em Java (JDBC)

Criar o diagrama entidade associação do exemplo do hotel no Oracle Designer

Aqui pode escolher o Sistema operativo, e o software. Para falar, faça download do Cliente 2.

Manipulação de Banco de Dados com Java 1. Objetivos

Manual de Importação do WebMail para o Exchange

INSTALAR O SQL SERVER NO SERVIDOR. (É o caso da Zervan, que existe o servidor da Fernanda e queremos instalar um outro na máquina de Lilian)

Laboratório 3. Base de Dados II 2008/2009

UNIVERSIDADE CATÓLICA PORTUGUESA

Reconhecer alguns dos objectos VBA Automatizar bases de dados recorrendo à programação VBA e scripts SQL

Bases de Dados 2007/2008. Aula 9

Manual de Instalação e Configuração MySQL

Solutions for Information Technologies. BIS-Navegador. Oracle

Programação Orientada a Objetos JDBC Java Database Connectivity

EDUROAM. Configuração para Windows Vista. Nucleo de Informática da Universidade da Madeira

2 Categorias Categories Todas as categorias de actividade são apresentadas neste espaço All activity categories are presented in this space

Editor Eclipse para Programas F

ESCOLA SUPERIOR DE TECNOLOGIA DE TOMAR DEPARTAMENTO DE ENGENHARIA INFORMÁTICA 2005/ Valores

Aceder à plataforma do concurso Accessing the call for applications platform. Submeter documentos Upload documents. Apagar documentos Delete documents

Integrando Java com Banco de Dados

Easy Linux! FUNAMBOL FOR IPBRICK MANUAL. IPortalMais: a «brainmoziware» company Manual Jose Lopes

JAVA 14 ODBC / JDBC Aceder a Bases de Dados através da Internet. Vitor Vaz da Silva

P S I 2. º A N O F 5 M E S T R E / D E T A L H E E P E S Q U I S A. Criar uma relação mestre-detalhe. Pesquisa de informação

Roteiro de Uso do InstallShield

Módulo 3936 ASP.NET. Financiado pelo FSE

Leonardo Gresta Paulino Murta

Java RMI. Alcides Calsavara

Completing your Participant Agreement Como preencher o Contrato de Participação

Utilizando subversion como controle de versão

Deverá ser apresentada uma caixa de combinação para auxiliar o utilizador a escolher o distrito de residência do entrevistado.

Redes de Computadores. Trabalho de Laboratório Nº8

Sistemas Operativos - Mooshak. 1 Mooshak. in fct.ualg.pt/. mooshak.deei.fct.ualg.pt/.

JPA: Persistência padronizada em Java

Programação com Acesso a Banco de Dados

Guião de Introdução ao Eclipse IDE Índice

Programming in C# Conteúdo Programático. Área de formação Plataforma e Tecnologias de Informação

Programação em Rede JDBC

C# - Conexão com MySQL

Click the + sign to add new server details. Clique no sinal de "+" para adicionar novos detalhes do servidor. Enter a friendly name for your BI Server

JDBC. Prof. Márcio Bueno

JDBC (Java Database Connectivity) Padrão de Projeto DAO (Data Access Object) Roteiro para instalação do banco de dados e do driver JDBC

Criação de Applets com o JBuilder Professor Sérgio Furgeri

Aula Extra Conexão ODBC para aplicações Delphi 7 que usam SQL Server 2005

2. Execute o arquivo com o comando a seguir: sudo./alfresco-community-4.2.b-installer-linux-x64.bin

Criação de uma aplicação Web ASP.NET MVC usando Code First

User Guide Manual de Utilizador

Conselho Geral da Ordem Dos Advogados Departamento Informático

LEITOR DE CARTÕES (Cédulas Profissionais)

PadrãoIX. Módulo II JAVA. Marcio de Carvalho Victorino. JDBC - Java Database Connectivity A,L,F,M

Java & Bancos de Dados Adaptado de Slides da Universidade Salgado de Oliveira Goiânia

Bases de Dados 2005/2006. Aula 1

JDBC. Siga as instruções para instalar o banco de dados H2 e criar a tabela Alunos.

Tarefa Orientada 1 Base de Dados Editora

Com criar relatório no Report Services do Microsoft SQL Server 2008 R2 integrado com o

Tarefa Orientada 5 Aplic. Manutenção de Facturas de Clientes

Instalação e Configuração RPM Remote Print Manager para Windows 2000

Sistemas Empresariais Integrados

Configuração para Windows XP

Banco de Dados. Banco de Dados. Alcides Pamplona Alcides Pamplona Linguagem de Programação CESBD 2010

SATA 3.5. hd:basic. hdd enclosure caixa externa para disco rígido

Procedimentos de Instalação e Configuração do Print Management no Windows Server 2008 R2 SP1 64 Bits

Manipulação de Banco de Dados com Java. Ms. Bruno Crestani Calegaro Maio/ 2015

Front-End Uso da Linguagem Turbo Delphi para Acesso ao Banco de Dados Mysql

Versão: 1.0. Segue abaixo, os passos para o processo de publicação de artigos que envolvem as etapas de Usuário/Autor. Figura 1 Creating new user.

Delphi IDE. Jocélio Passos Delphi - IDE. Integrad Development Enviroment Ambiente de Desenvolvimento Integrado

Manual de Configuração

Oracle SQL Developer

Noções de. Microsoft SQL Server. Microsoft SQL Server

Conselho Geral da Ordem Dos Advogados Departamento Informático

Tarefa Orientada 2 Aplic. Manutenção de Produtos - DataGridView

Curso de Aprendizado Industrial Desenvolvedor WEB

Accessing the contents of the Moodle Acessando o conteúdo do Moodle

ETEC DR. EMÍLIO HENRNANDEZ AGUILAR PROGRAMAÇÃO DE COMPUTADORES I PROFESSOR RAFAEL BARRETO

Transcrição:

Universidade da Beira Interior Departamento de Informática Bases de Dados I (Engenharia Informática e Ensino da Informática) Teoria das Bases de Dados (Matemática/Informática) Bases de Dados (Matemática Aplicada) 2004/2005 Configuração do acesso a dados (via ODBC). A base de dados Projecto1 foi criada como resultado da execução dos scripts exemplo. Em Projecto1 podemos encontrar diversos elementos criados a partir dos scripts (tables, stored procedures, views, triggers, e dados em algumas tabelas). A base de dados Projecto1 pode ser explorada usando, por exemplo, o SQL Server Enterprise Manager. Figure 1 Utilizar o SQL Server Enterprise Manager para explorar a base de dados Projecto1 A exploração da base de dados também pode ser feita via aplicações desenvolvidas usando linguagens de programação: Delphi, C/C++, Java, e outras. Para a disciplina de Bases de Dados a linguagem de programação seleccionada foi o Java, como o ambiente de desenvolvimento da Borland, mais concretamente, o JBuilder X Foundation. Para podermos desenvolver aplicações que falem com a base de dados Projecto1 é necessário configurar o acesso. No caso do servidor de bases de dados SQL Server 2000, o acesso pode fazerse via ODBC. As aplicações JBuilder comunicam com os servidores de bases de dados usando a API JDBC. No caso do acesso a dados ser via ODBC, é necessário fazer um mapeamento JDBC-ODBC. pag.1/15

Configurar a origem de dados via ODBC. Executar a aplicação de configuração de acesso: Control Panel + Administrative Tools + Data Sources (ODBC). Figure 2 Configurar a origem de dados (ODBC) As figuras Figure 3 a Figure 10 exemplificam o processo de configuração. Figure 3 Escolher System DSN (se o utilizador tiver privilégios para isso) e adicionar... Figure 4 Escolher o driver apropriado: SQL Server pag.2/15

Figure 5 Criar uma nova origem de dados. O nome dado à origem de dados, vai ser usado na aplicação desenvolvida no JBuilder! Figure 8 Log associado ao acesso Figure 6 - Autenticação... Figure 9 - Resumo das características Figure 7 Seleccionar a base de dados pretendida. Neste exemplo Projecto1 é a base de dados criada pela execução dos scripts Figure 10 Teste da origem de dados pag.3/15

Developing Database Applications JBuilder 2005 Developing Database Applications provides information on using JBuilder s DataExpress database functionality to develop database applications. It also describes how to use dbswing components to create a user interface (UI) for your application. Be sure to check for documentation additions and updates at http://www.borland.com/techpubs/jbuilder. Understanding JBuilder database applications A database application is any application that accesses stored data and allows you to view and perhaps modify or manipulate that data. In most cases, the data is stored in a database. However, data can also be stored in files as text, or in some other format. JBuilder allows you to access this information and manipulate it using properties, methods, and events defined in the DataSet packages of the DataExpress Component Library in conjunction with the dbswing package. A database application that requests information from a data source such as a database is known as a client application. A DBMS (Database Management System) that handles data requests from various clients is known as a database server. Database application architecture JBuilder s DataExpress architecture is focused on building all-java client-server applications, applets, servlets, and JavaServer Pages (JSP) for the inter- or intranet. Because applications you build in JBuilder are all-java at run time, they are crossplatform. JBuilder applications communicate with database servers through the JDBC API, the Sun database connectivity specification. JDBC is the all-java industry standard API for accessing and manipulating database data. JBuilder database applications can connect to any database that has a JDBC driver. DataExpress is a package, com.borland.dx.dataset, of Borland classes and interfaces that provide basic data access. This package also defines base provider and resolver classes as well as an abstract DataSet class that is extended to other DataSet objects. These classes provide access to information stored in databases and other data sources. This package includes functionality covering the three main phases of data handling: Providing General functionality to obtain data and manage local data sets. (JDBC specific connections to remote servers are handled by classes in the com.borland.dx.sql.dataset package.) Manipulation Navigation and editing of the data locally. Resolving General routines for the updating of data from the local DataSet back to the original source of the data. (Resolving data changes to remote servers through JDBC is handled by classes in the com.borland.dx.sql.dataset package.) The core functionality required for data connectivity is contained in the com.borland.dx.dataset, com.borland.dx.sql.dataset, and com.borland.datastore packages. The components in these packages encapsulate both the connection between the application and its source of the data, as well as the behavior needed to manipulate the data. The features provided by these packages include that of database connectivity as well as data set functionality. The following diagram illustrates a typical database application and the layers from the client JBuilder DataExpress database application to the data source: pag.4/15

dbswing Figure 11 Diagram of a typical database application The dbswing package allows you to build database applications that take advantage of the Java Swing component architecture. In addition to pre-built, data-aware subclasses of most Swing components, dbswing also includes several utility components designed specifically for use in developing DataExpress and JDataStore-based applications. To create a database application, you first need to connect to a database and provide data to a DataSet. To use the data-aware dbswing components, 1. Open the Frame file, and select the Design tab. 2. Select one of the dbswing pages: dbswing, More dbswing, or dbswing Models. 3. Click a component on the component palette, and click in the UI designer to place the component in the application. 4. Select the component in the component tree or the UI designer. Depending on the type of component, and the layout property for the contentpane containing the component, the designer displays black sizing nibs on the edges of a selected component. Some of the component s (JdbNavToolBar and JdbStatusLabel) automatically bind to whichever data set has focus. For others (like JdbTable), set the component s dataset and/or columnname properties in the Inspector to bind the component to an instantiated DataSet. pag.5/15

The following list contains a few of the dbswing components available from the dbswing page of the component palette: o TableScrollPane o JdbTable o JdbNavToolBar o JdbStatusLabel o JdbTextArea o JdbComboBox o JdbLabel o JdbList o JdbTextPane o JdbTextField With increased functionality and data-aware capabilities, dbswing offers significant advantages over Swing. Also, dbswing is entirely lightweight, provides look-and-feel support for multiple platforms, and has strong conformance to Swing standards. Using dbswing components, you can be sure all your components are lightweight. Connecting to a database Sun worked in conjunction with database and database tool vendors to create a DBMS independent API. Like ODBC (Microsoft s rough equivalent to JDBC), JDBC is based on the X/Open SQL Call Level Interface (CLI). Some of the differences between JDBC and ODBC are, JDBC is an all Java API that is truly cross platform. ODBC is a C language interface that must be implemented natively. Most implementations run only on Microsoft platforms. Most ODBC drivers require installation of a complex set of code modules and registry settings on client workstations. JDBC is an all Java implementation that can be executed directly from a local or centralized remote server. JDBC allows for much simpler maintenance and deployment than ODBC. JDBC is endorsed by leading database, connectivity, and tools vendors including Oracle, Sybase, Informix, InterBase, DB2. Several vendors, including Borland, have JDBC drivers. Existing ODBC drivers can be utilized by way of the JDBC-ODBC bridge provided by Sun. Using the JDBC-ODBC bridge is not an ideal solution since it requires the installation of ODBC drivers and registry entries. ODBC drivers are also implemented natively which compromises cross-platform support and applet security. JBuilder DataExpress components are implemented using the Sun database connectivity (JDBC) Application Programmer Interface (API). To create a Java data application, the Sun JDBC sql package must be accessible before you can start creating your data application. If your connection to your database server is through an ODBC driver, you also need the Sun JDBC-ODBC bridge software. For more information about JDBC or the JDBC-ODBC bridge, visit the JDBC Database Access API web site at http://java.sun.com/products/jdbc/. Connecting to databases You can connect JBuilder applications to remote or local SQL databases, or to databases created with other Borland applications such as C++ Builder or Delphi. To connect to a remote SQL database, you need either of the following: A JDBC driver for your server. Some versions of JBuilder include JDBC drivers. One of these drivers is InterClient. Check the Borland web site at http://www.borland.com/jbuilder/ for availability of JDBC drivers in your edition of JBuilder or contact the technical support department of your server software company for availability of JDBC drivers. An ODBC-based driver for your server that you use with the JDBC-ODBC bridge software. Note The ODBC driver is a non-portable DLL. This is sufficient for local development, but won t work for applets or other all-java solutions. When connecting to local, non-sql databases such as Paradox or Visual dbase, use an ODBC driver appropriate for the table type and level you are accessing in conjunction with the JDBC-ODBC bridge software. Note When you no longer need a Database connection, you should explicitly call the Database.closeConnection() method in your application. This ensures that the JDBC connection is not held open when it is not needed and allows the JDBC connection instance to be garbage collected. pag.6/15

Adding a Database component to your application The Database component is a JDBC-specific component that manages a JDBC connection. To access data using a QueryDataSet or a ProcedureDataSet component, you must set the database property of the component to an instantiated Database component. Multiple data sets can share the same database, and often will. In a real world database application, you would probably place the Database component in a data module. Doing so allows all applications that access the database to have a common connection. To add the Database component to your application, 1. Create a new project and application files using the Application wizard. (You can optionally follow these instructions to add data connectivity to an existing project and application.) To create a new project and application files: a) Choose File Close from the JBuilder menu to close existing applications. If you do not do this step before you do the next step, the new application files will be added to the existing project. b) Choose File New and double-click the Application icon to start the Application wizard. Accept or modify the default settings to suit your preferences. 2. Open the UI designer by selecting the Frame file (for example, Frame1.java) in the content pane, then select the Design tab at the bottom of the IDE. 3. Select the DataExpress page on the component palette, and click the Database component. 4. Click anywhere in the designer window to add the Database component to your application. This adds the following line of code to the Frame class: Database database1 = new Database(); Setting Database connection properties The Database connection property specifies the JDBC driver, connection URL, user name, and password. The JDBC connection URL is the JDBC method for specifying the location of a JDBC data provider (for example, SQL server). It contains all the information necessary for making a successful connection, including user name and password. You can access the ConnectionDescriptor object programmatically, or you can set connection properties through the Inspector. If you access the ConnectionDescriptor programmatically, follow these guidelines: If you set promptpassword to true, you should also call openconnection() for your database. openconnection() determines when the password dialog is displayed and when the database connection is made. Get user name and password information as soon as the application opens. To do this, call openconnection() at the end of the main frame s jbinit() method. If you don t explicitly open the connection, it will try to open when a component or data set first needs data. pag.7/15

Aplicação exemplo Iniciar o JBuilder X Foundation e usar File/New e seleccionar Application. Figure 12 Criar uma nova aplicação Para obter uma aplicação simples basta seguir os Wizard, ver figuras Figure 13 a Figure 16. Figure 13 Indicar o nome e a directoria Figure 15 Indicar o nome da frame e os menus a incluir Figure 14 - Indicar a Class name & Package Figure 16 Indicar um nome para a configuração pag.8/15

Aceder à base de dados Após termos executado (F9) a aplicação criada seguindo o Wizard, podemos incluir algumas componentes de modo a aproximar a nossa aplicação ao pretendido: aceder aos dados da base de dados Projecto1. 1º Passo: Incluir duas componentes na frame framemain. Colocar a frame em primeiro plano (em modo de design); Adicionar uma componente TableScrollPane: o Seleccionar a palete dbswing na palete de componentes; o Seleccionar (click) a componente TableScrollPane e fazer click na fram; Adicionar uma componente: o Seleccionar a palete dbswing na palete de componentes; o Seleccionar (click) a componente JdbTable e fazer click na frame; o Dar um nome apropriado à componente, por exemplo dbtdepartamentos. No final do 1º passo devemos ter uma grelha sobre a nossa frame. Esta grelha (JdbTable) vai-nos permitir visualizar dados, por exemplo os dados da tabela Departamento. Estes dados hão-de chegar à grelha usando outras componentes, nomeadamente, uma Database (componente para aceder ao servidor da base de dados) e uma QueryDataSet (componente onde podemos especificar uma query para aceder aos dados). 2º Passo: Incluir uma componente Database. Colocar a frame framemain em primeiro plano (em modo de design); Adicionar uma componente Database: o Seleccionar a palete DataExpress na palete de componentes; o Seleccionar (click) a componente Database e fazer click na frame framemain; o Dar um nome apropriado para esta componente, por exemplo, dbprojecto. Especificar as propriedades da componente dbprojecto: o Especificar as propriedades da ligação (Figure 17e Figure 18). Note-se em particular o URL usado: jdbc:odbc:projecto. Figure 17 Especificar as propriedades da ligação Figure 18 Escolher o driver e a base de dados que se pretende usar. Indicar o user name e a password e testar a ligação. Seleccionar a opção "Prompt user password" pag.9/15

A Figure 19 ilustra a aplicação exemplo Bases de Dados 2004/2005 Figure 19 Aplicação com uma componente Database (database1) Uma vez configurado o acesso a dados, e encapsulado, numa componente Database (dbprojecto), podemos aceder aos dados. Por exemplo, para mostrar todas os departamentos basta executar a instrução Select * from departamento. A componente QueryDataSet pode ser usada para este fim. 3º Passo: Incluir uma componente QueryDataSet. Colocar a frame framemain em primeiro plano (em modo de design); Adicionar uma componente QueryDataSet: o Seleccionar a palete DataExpress na palete de componentes; o Seleccionar (click) a componente QueryDataSet e fazer click na frame framemain; o Dar um nome apropriado para esta componente, por exemplo, qdsdepselect. Especificar as propriedades da componente qdsdepselect: o Especificar a instrução de interrogação e fazer a ligação à componente dbprojecto (Figure 20 e Figure 21). Figure 20 - Seleccionar query... pag.10/15

Figure 21 - Instrução SQL e componente database associada 4º Passo: Encaminhar os resultados para a componente JdbTable: Colocar a frame framemain em primeiro plano (em modo de design); Seleccionar a componente dbtdepartamentos: o Seleccionar a propriedade dataset e escolher a componente qdsdepselect. e pronto temos dados (ver Figure 22): Figure 22 - Dados obtidos pela query qdsdepselect e encaminhados para a grelha dbtdepartamentos Nesta fase podemos executar a aplicação e verificar que esta se comporta de forma apropriada. De seguida vamos incluir mais alguma funcionalidade na aplicação, nomeadamente, vamos inserir/alterar/eliminar departamentos e dar a possibilidade ao utilizador para obter dados mais recentes. Note-se que vários utilizadores podem estar a actualizar a base de dados, donde esta vai sendo alterada. Logo a nossa grelha pode estar a mostrar dados fantasma Incluir o menu Departamento A primeira modificação à aplicação incluir um menu Departamento e as respectivas opções (Inserir, Alterar, Eliminar e Refrescar). A Figure 23 ilustra o efeito pretendido. pag.11/15

Figure 23 Aspecto da aplicação a executar e do menu Departamento Quando o utilizador seleccionar a opção Inserir deve-lhe ser dada a oportunidade de inserir um novo departamento. A Figure 24 ilustra este aspecto da aplicação. Figure 24 Inserir departamento O código do departamento é colocado automaticamente (!) com o número do departamento a inserir. Como vários utilizadores podem executar em simultâneo esta aplicação (ou outra com efeito semelhante), o código sugerido (5) pode já ter sido inserido, e nesse caso teríamos um problema. Na aplicação exemplo, vamos mostrar uma mensagem de erro e dar uma oportunidade ao utilizador para tentar novamente (Figure 25. Figure 25 - Erro na inserção de um departamento: chave primária violada Portanto, a aplicação deve estar preparada para tratar deste problema, procurando, por exemplo, um novo código. Inserir um departamento 1. Usar File/New e seleccionar Dialog. 2. Incluir etiquetas (JLabel), caixas de texto (TTextField) e botões (JButton) de modo a dar um aspecto adequado ao formulário (JDialog). 3. Dar nomes apropriados às componentes e guardar o trabalho, usar por exemplo o nome dlgdepinserir. pag.12/15

4. Criar um método, por exemplo, public int showdepinsalt(int DepNum, StringBuffer Nome, StringBuffer Local) que permita mostrar o diálogo e mostrar os valores do DepNum, Nome e Local do departamento. Este método deve devolver 0 se o utilizador tiver escolhido o botão OK para fechar o diálogo. O extracto de código seguinte ilustra esta função: // showdepinsalt(int DepNum, String Nome, String Local) // Parameters: // [in]: // DepNum - the number of department. // [inout]: // Nome - string, the name of department // Local - string, Location // Result: Integer // 0 - Button Ok has clicked and (Nome or Local modified) // >0 - Button Cancel has clicked // <0 - An error has ocurred // // purpose: get the department Name and Location. public int showdepinsalt(int DepNum, StringBuffer Nome, StringBuffer Local){ jtfdepcod.settext( Integer.toString( DepNum)); jtfnome.settext(nome.tostring()); jtflocal.settext(local.tostring()); this.show(); jtfnome.settext(jtfnome.gettext().trim()); jtflocal.settext(jtflocal.gettext().trim()); if (isclickedjbtok && (Nome.toString()!= jtfnome.gettext()) && (Local.toString()!= jtflocal.gettext())){ Nome.append(jtfNome.getText()); Local.append(jtfLocal.getText()); return 0; else return 1; 5. Quando o utilizador escolher a opção Departamento/Inserir, deve-lhe ser mostrado o diálogo, por exemplo, usando o código: void midepinserir_actionperformed(actionevent e) { dlgdepinserir dlg = new dlgdepinserir(this, "Inserir departamento", true); StringBuffer Nome = new StringBuffer(""); StringBuffer Local = new StringBuffer(""); int nextdep; while (true) { nextdep = GetNextDepNum(); // get the next depnum if (dlg.showdepinsalt(nextdep, Nome, Local) == 0) { try { DepInserir(nextDep, Nome.toString(), Local.toString()); 6. Obter o número de departamento: função GetNextDepNum. // GetNextDepNum // input: none // output: int // purpose: get the next department number. private int GetNextDepNum() { // try to execute the query try { qdsdepnext.executequery(); catch (Exception ex) { return -1; pag.13/15

// gather the results DataRow resultrow = new DataRow(qdsDepNext); qdsdepnext.getdatarow(resultrow); // return the next dep number if (resultrow.isnull("nextdep")) return 1; else return 1 + resultrow.getint("nextdep"); Esta função emprega uma componente QueryDataSet, qdsdepnext, para obter o máximo DepNum da tabela Departamento. A instrução SQL usada é a seguinte: "Select Max(DepNum) NextDep from Departamento"; 7. Inserir os dados introduzidos pelo utilizador na tabela Departamento: // DepInserir // input: // [in] DepNum - number of departamento // [in] Nome - name of departamento // [in] Local - location of departamento // output: none // purpose: insert a new raw in departamento table. private void DepInserir(int DepNum, String Nome, String Local) { // set the parameter raw values prdepvalues.setint("depnum", DepNum); prdepvalues.setstring("nome", Nome); prdepvalues.setstring("local", Local); // Use a query provider ro execute a SQL Statement which don't // return a result set! QueryProvider qpdepinserir = new QueryProvider(); qpdepinserir.executestatement(dbprojecto,sql_ins_dep, prdepvalues); qpdepinserir.closestatement(); Como esta operação não envolve trazer dados da base de dados, a componente a usar deve ser uma QueryProvider e não uma QueryDataSet. A instrução SQL usada é a seguinte: Insert Into Departamento Values (:DepNum,:Nome,:Local). Os parâmetros (:DepNum, :Nome e :Local) são estabelecidos pelo emprego da componente ParameterRow (prdepvalues). Alterar um departamento 1. Associar código à selecção de Departamento/Alterar: void midepalterar_actionperformed(actionevent e) { dlgdepinserir dlg = new dlgdepinserir(this, "Alterar departamento", true); DataRow resultrow = new DataRow(qdsDepSelect); qdsdepselect.getdatarow(resultrow); if (!resultrow.isassignednull("depnum")) { int nextdep = resultrow.getint("depnum"); StringBuffer Nome = new StringBuffer(resultRow.getString("Nome")); StringBuffer Local = new StringBuffer(resultRow.getString("Local")); if (dlg.showdepinsalt(nextdep, Nome, Local) == 0) { try { DepAlterar(nextDep, Nome.toString(), Local.toString()); pag.14/15

2. Vamos usar o mesmo formulário da operação Departamento/Inserir. Os dados a serem alterados correspondem ao departamento que estiver seleccionado na grelha dbtdepartamentos. Podemos usar um objecto DataRow para obtermos os dados pretendidos. DataRow resultrow = new DataRow(qdsDepSelect); qdsdepselect.getdatarow(resultrow); 3. Alterar os dados do departamento: // DepAlterar // input: // [in] DepNum - number of departamento // [in] Nome - name of departamento // [in] Local - location of departamento // output: none // purpose: update a raw in departamento table, identified by DepNum. private void DepAlterar(int DepNum, String Nome, String Local) { // set the parameter raw values /* prdepvalues.setint("depnum", DepNum); prdepvalues.setstring("nome", Nome); prdepvalues.setstring("local", Local); */ QueryProvider qpdepalterar = new QueryProvider(); qpdepalterar.executestatement(dbprojecto, "Update Departamento\nSet Nome =:Nome,\n Local =:Local\nWhere DepNum " + "= :DepNum", prdepvalues); qpdepalterar.closestatement(); Connection _conn = dbprojecto.getjdbcconnection(); try { // inserir despesa PreparedStatement sd = _conn.preparestatement(sql_upd_dep); sd.setstring(1, Nome); sd.setstring(2, Local); sd.setint(3, DepNum); sd.executeupdate(); sd.close(); catch (SQLException e) { System.err.println("ERRO: Inserir despesa - " + e.getmessage()); Podemos usar uma componente QueryProvider para executar a operação pretendida, análogo ao modo como foi feita a inserção (em comentário, sombreado mais escuro); ou sem recorrermos às componentes podemos preparar um statement Java, para efectuarmos a alteração dos dados. A instrução SQL a ser enviada ao servidor é a seguinte: "Update Departamento Set Nome =?, Local =? Where DepNum =?". pag.15/15