- Delphiartiklar, tips, forum, länksamling - 

      

START | DELPHI | LÄNKARGÄSTBOK 




 Forum

Grundkurs
  »Introduktion
  »Snabbguide
  »Komponenter
  »Händelser
  »Strängar
  »Räkna med Delphi   »Egna typer
  »Selektion
  »Iteration
  »Menyer
  »Funktioner
  »Arraystrukturer

Tips & Tricks
  »Nya tips
  »Blandat
  »Databaser
  »Filer
  »Forms
  »Grafik
  »Internet
  »Komponenter
  »Matematik
  »Multimedia
  »Objekt/ActiveX
  »Skrivare
  »Strängar
  »System
  »Mest lästa tips

Artiklar
  »Delphi och ADO
  »Bygga en DLL
  »Skapa en enkel rapport
  »Hantera registret
  »Enheter, units
  »Klassen TCanvas
  »Använd LookUp Controls

 Nya tips
 Lägg till tips
 Delphilänkar
 Gästbok

 



 FuzzyDizzie » Delphi » Artiklar » Delphi och ADO
Operativsystem: Windows 95/98/ME/2000/XP
Delphiversion: Delphi 6 Professional eller senare
Komponenter: TDatasource, TAdoQuery, TDBGrid
  Publicerad: 2002-02-01
Läst: 3845
Röster: 35
Skribent: Staffan Berg

Rösta på artikeln


Förord


Med denna artikel ämnar jag demonstrera hur man kan använda databaser med hjälp av ADO (ActiveX Data Objects) som är en teknologi utvecklad av Microsoft. I artikeln kommer jag att visa hur man läser poster från en databas, lägger till poster, uppdaterar och tar bort poster.

Skapa ett nytt projekt
I projektet kommer vi att använda komponenterna TDatasource, TADOQuery och TDBGrid. Du finner TDatasource i Data Access-fliken och TDBGrid-komponenten i Data Controls-fliken i komponentpaletten. TADOQuery hittar du under ADO-fliken. Starta ett nytt projekt och infoga dessa tre kontroller på formuläret. När du är klar skall ditt formulär se ut enligt bilden nedan.

Den första åtgärd vi skall vidta är att koppla ADOQuery-komponenten till Datasource-kontrollen och det gör du genom att ställa in egenskapen Dataset i Datasource1 till namnet på ADOQuery-kontrollen. Vi använder oss i detta exempel av de standardnamn som Delphi tilldelar komponenterna dvs. ADOQuery-komponenten får således heta ADOQuery1 och Datasource-komponenten får heta Datasource1.

Markera sedan ADOQuery1. Denna kontroll skall senare definiera datakällan varifrån data skall hämtas till vår DBGrid. Klicka på den lilla knappen med tre punkter på egenskapen Connectionstring i Objektinspektorn. Kör sedan guiden och leta reda på en lämplig databas som vi skall använda i projektet. Om du har databasfilen Biblio.mdb (som följer Microsoft Access) på hårddisken så föreslår jag att du använder den. Välj sedan egenskapen SQL och klicka på knappen med tre punkter. Här ska vi skriva in en enkel SQL-sats. Skriv in följande kodrad:


 SELECT * FROM Authors;



SQL-satsen plockar ut alla poster från alla fält i tabellen Authors.

Nu är det dags att koppla vår DBGrid till datakällan. Markera DBGrid1 och välj Datasource1 i egenskapen Datasource i Objektinspektorn. Detta är den enda inställning du behöver göra i DBGrid1. Markera nu återigen ADOQuery1. Ställ in egenskapen Active till True. Du kan nu i designläget se alla de poster som villkoret i SQL-satsen medger dvs samtliga. Vi har nu skapat en enkel databastillämpning utan att egentligen ha skrivit en enda kodrad.


Lägga till poster
I vårt program vill vi naturligtvis ha möjlighet att lägga till nya poster. För att göra detta skall vi använda oss av satsen INSERT...INTO. Infoga en kommandoknapp på formuläret och ge den namnet LaggTill. Skriv därefter in nedanstående Pascalkod i knappens klickhändelse:


procedure
TForm1.LaggTillClick(Sender: TObject);
var
namn:string;
ar:integer;
begin
namn := 'Staffan Berg';
ar := 1964;

Adoquery1.SQL.Text := 'Insert into Authors(Author, Year_Born) VALUES('+
QuotedStr(namn) + ',' +
IntToStr(ar) + ')';
adoquery1.ExecSQL;
adoquery1.SQL.Text := 'select * from authors order by au_id';
adoquery1.Active :=False;
adoquery1.Active :=true;

end;


Har du sysslat med databaser och SQL tidigare känner du säkert igen dig i delar av koden. Notera att jag använder funktionen QuotedStr som har till uppgift att omgärda text eller variabler som är av typen text med enkelfnuttar.

Efter att ha kört INSERT...INTO-satsen med metoden ExecSQL så vill vi visa den nya posten i vår DBGrid. Detta gör vi genom att först ändra textegenskapen SQL till en sats som läser in alla poster från tabellen Authors och sorterar dessa efter ID-kolumnen. För att DBGrid-kontrollen skall uppdateras måste vi först göra den inaktiv för att sedan återigen göra den aktiv.

Uppdatera poster
För att uppdatera en eller flera poster med SQLkod används den traditionella UPDATE...SET-satsen. Vi demonstrerar detta med ett exempel. Infoga ytterligare en kommandoknapp och döp den förslagsvis till Uppdatera:


procedure
TForm1.UppdateraClick(Sender: TObject);
var
namn:string;

begin
namn := 'Kalle';

Adoquery1.SQL.Text := 'UPDATE Authors SET Author = ' + QuotedStr(namn) +' WHERE author = '+ QuotedStr('Johnny')+'';

adoquery1.ExecSQL;
adoquery1.SQL.Text := 'select * from authors order by au_id desc';
adoquery1.Active :=False;
adoquery1.Active :=true;
end;


Proceduren uppdaterar alla poster med namnet Johnny i fältet Author till Kalle. Sedan läses alla poster in på nytt på samma sätt som i föregående exempel med att lägga till nya poster.

Radera poster
För att ta bort poster används SQL-satsen DELETE...FROM. Infoga en knapp med namnet Radera och skriv in nedanstående kod.


procedure
TForm1.RaderaClick(Sender: TObject);

begin
Adoquery1.SQL.Text := 'DELETE FROM Authors WHERE au_ID = 10';

adoquery1.ExecSQL;
adoquery1.SQL.Text := 'select * from authors order by au_id desc';
adoquery1.Active :=False;
adoquery1.Active :=true;
end;


Proceduren raderar alla rader i fältet au_ID som har värdet 10. Eftersom fältet au_ID i detta exempel är en primärnyckel och alltså är unik så blir det bara denna enda post som raderas.


Vid tangentbordet
/Staffan Berg



 
 
© Copyright 2005 - Staffan Berg
- Alla rättigheter förbehålles -