Avatar billede jeanetteh Nybegynder
07. maj 2004 - 11:55 Der er 3 kommentarer

Delphi med accrss database

Jeg er i gang med at lave et lille program i delphi, og skal connecte til en Access database via en ADOQurey, og har lidt problemer med at få det til at virke, jeg har 2 tabeller i databasen der indeholder både tal, tekst og ja/nej felter.
på min form har jeg et datagrid, editbokse til tekst og tal feldterne, og databaseCheckboxe til ja/nej, de virker fint når jeg henter oplysninger,
jeg kan godt gemme tekst og tal, men ikke om Checkboxe er makeret hvordan gør jeg dette ?????
og kan sætte min ADOQurey SQL setning til at hente fra 2 tabeller til samme datagrid ????
Avatar billede stone Forsker
07. maj 2004 - 14:08 #1
dine check boxe behøver du ikke at gemme i databasen men i en *.ini

her et eksempel:

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls,inifiles;

type
  TForm1 = class(TForm)
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormCreate(Sender: TObject);
  private

  public
    { Public declarations }
  end;

var
  Form1: TForm1;
ini : Tinifile;


implementation

{$R *.DFM}


procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
var i : Integer;
begin
ini := TIniFile.Create('c:\temp\MyIniFile.ini');

for i := 0 to ComponentCount-1 do
  if (Components[i] is TCheckbox) then
  ini.WriteBool('Indstillinger',components[i].Name,(Components[i] as TCheckbox).Checked);
ini.Free;
end;


procedure TForm1.FormCreate(Sender: TObject);
var
i : integer;
begin
ini := TIniFile.Create('c:\temp\MyIniFile.ini');

for i := 0 to ComponentCount-1 do
  if (Components[i] is TCheckbox) then
    (Components[i] as TCheckbox).Checked := ini.ReadBool('Indstillinger',components[i].Name,false);
  ini.Free;
end;
Avatar billede hrc Mester
18. maj 2004 - 13:33 #2
-> Jeg kan godt gemme tekst og tal, men ikke om Checkboxe er makeret.Hvordan gør jeg dette?

Det afhænger meget af hvilke felter du har tænkt dig af gemme eksempelvis en checkbox' checked-værdi i. Gemmer du i et heltalsfelt bliver du nødt til at typecaste værdien:

  med et script i retning af:
  insert into Components (name, caption, checked) values (:pName, pCaption, pChecked)

  ADOQuery.ParamByName('Checked').AsInteger := integer(cbHjemmeboende.Checked);

Nu synes jeg Access er lidt sær idet der tit skal [] omkring en masse felter. Jeg har ikke helt fundet reglen, men prøver mig frem. Hvis du prøver ovenstående og der er fejl, så kan du gøre det samme...

-> Kan min ADOQurey SQL sætning hente fra 2 tabeller til samme datagrid?

Det kan den sagtens:

  select a.navn, a.adresse, a.postnr, b.by from Adresse a, PostBy b where
    a.postnr = b.postnr

Ovenstående samler to tabeller og genererer en færdig adresserecord - igen skal du sikkert sætte nogle [] ind hist og her - måske overalt.
Avatar billede nop Nybegynder
25. maj 2004 - 21:27 #3
Mht. de reserverede navne så har jeg en function som tester om navnet er reserveret, men man kan jo bare sætte [] altid.
Den er til sql men gælder sikkert osse for access, næsten.

function _testNameReserved(const s: string): boolean;
const
    count = 5*36;
    keywords: array[1..count] of string = (
        'ADD','EXCEPT','PERCENT','ALL','EXEC',
        'PLAN','ALTER','EXECUTE','PRECISION','AND',
        'EXISTS','PRIMARY','ANY','EXIT','PRINT',
        'AS','FETCH','PROC','ASC','FILE',
        'PROCEDURE','AUTHORIZATION','FILLFACTOR','PUBLIC','BACKUP',
        'FOR','RAISERROR','BEGIN','FOREIGN','READ',
        'BETWEEN','FREETEXT','READTEXT','BREAK','FREETEXTTABLE',
        'RECONFIGURE','BROWSE','FROM','REFERENCES','BULK',
        'FULL','REPLICATION','BY','FUNCTION','RESTORE',
        'CASCADE','GOTO','RESTRICT','CASE','GRANT',
        'RETURN','CHECK','GROUP','REVOKE','CHECKPOINT',
        'HAVING','RIGHT','CLOSE','HOLDLOCK','ROLLBACK',
        'CLUSTERED','IDENTITY','ROWCOUNT','','',
        'COALESCE','IDENTITY_INSERT','ROWGUIDCOL','COLLATE','IDENTITYCOL',
        'RULE','COLUMN','IF','SAVE','COMMIT',
        'IN','SCHEMA','COMPUTE','INDEX','SELECT',
        'CONSTRAINT','INNER','SESSION_USER','CONTAINS','INSERT',
        'SET','CONTAINSTABLE','INTERSECT','SETUSER','CONTINUE',
        'INTO','SHUTDOWN','CONVERT','IS','SOME',
        'CREATE','JOIN','STATISTICS','CROSS','KEY',
        'SYSTEM_USER','CURRENT','KILL','TABLE','CURRENT_DATE',
        'LEFT','TEXTSIZE','CURRENT_TIME','LIKE','THEN',
        'CURRENT_TIMESTAMP','LINENO','TO','CURRENT_USER','LOAD',
        'TOP','CURSOR','NATIONAL','TRAN','DATABASE',
        'NOCHECK','TRANSACTION','DBCC','NONCLUSTERED','TRIGGER',
        'DEALLOCATE','NOT','TRUNCATE','DECLARE','NULL',
        'TSEQUAL','DEFAULT','NULLIF','UNION','',
        'DELETE','OF','UNIQUE','DENY','OFF',
        'UPDATE','DESC','OFFSETS','UPDATETEXT','DISK',
        'ON','USE','DISTINCT','OPEN','USER',
        'DISTRIBUTED','OPENDATASOURCE','VALUES','DOUBLE','OPENQUERY',
        'VARYING','DROP','OPENROWSET','VIEW','DUMMY',
        'OPENXML','WAITFOR','DUMP','OPTION','WHEN',
        'ELSE','OR','WHERE','END','ORDER',
        'WHILE','ERRLVL','OUTER','WITH','ESCAPE',
        'OVER','WRITETEXT','','',''
    );
var
    i:      integer;
begin
    for i:=1 to count do
        if lowercase(s)=lowercase(keywords[i]) then begin
            result:=true;
            exit;
        end;
    result:=false;
end; //test name reserved
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester