Avatar billede roz Nybegynder
07. december 2004 - 16:09 Der er 9 kommentarer og
3 løsninger

Tilføje oplysninger til access database

Hvordan tilføjer jeg en ny række til en Access database?
Altså f. eks. når man trykker på en knap skal der til min åbne database (ADOTable1 eller Datasource) tilføjes en ny rækker i tabellen.
I hver af felterne i rækken skal der så blive den tekst der f. eks. står i edit1, 2, 3 osv.

Så den sidste række i databasen kommer til at se således ud:
Feltnavne: Tekst1  Tekst2  Tekst3
Indhold:  Edit1    Edit2    Edit3
Avatar billede hestetoften Nybegynder
07. december 2004 - 21:44 #1
ADOCommand.etEllerAndet-String :=
'INSERT INTO minTabel (Tekst1, tekst2,tekst3) VALUES ('+Edit1.Text+','+Edit2.Text+','+Edit3.Text+')';
ADOCommand.Execute;

Jeg kan ikke huske StringNavnet men det kan du se på objectInspectoren for ADOCommand.
Avatar billede hrc Mester
10. december 2004 - 12:48 #2
Du skal ikke bruge '+Edit1.Text+','+Edit2.Text+','+Edit3.Text+'. Det giver problemer hvis eks. Edit1.Text = '''Hej'' sagde manden'; Apostrofferne får sql'en til at fejle.

Brug parametre i stedet (komponenten er en TQuery):

Query.SQL.Text :=
  'INSERT INTO minTabel'+
  '  (Tekst1, tekst2,tekst3)'+
  '  VALUES (:Edit1,:Edit2,:Edit3)'+

Query.ParamByName('Edit1').AsString := Edit1.Tekst;
Query.ParamByName('Edit2').AsString := Edit2.Tekst;
Query.ParamByName('Edit3').AsString := Edit3.Tekst;

Query.ExecSQL;
Avatar billede roz Nybegynder
13. december 2004 - 17:08 #3
Jeg får følgende besked:

[Error] Unit2.pas(96): Incompatible types: 'String' and 'procedure, untyped pointer or untyped parameter'

ved denne linje:

Query1.ParamByName('Edit1').AsString := Edit1.Tekst;
Avatar billede roz Nybegynder
13. december 2004 - 17:43 #4
Nå ja. Skal måske lige siges at jeg bruger en Access database så selvom jeg fik løst ovenstående fejl kan SQL Queryen ikke få adgang til den.
Jeg har prøvet at bytte SQL Queryen ud med en ADO Query men kan ikke få koden tl at virke så.
Nogen forslag?
Avatar billede roz Nybegynder
13. december 2004 - 23:19 #5
Så har jeg næstem fået en kode til at virke:

ADOCommand1.CommandText := 'INSERT INTO Alarm (Dato, Tidspunkt, AlarmOptionLyd, AlarmOptionProgram, AlarmOptionBesked, AlarmOptionLås, AlarmOptionLogOff, AlarmOptionLuk, AlarmOptionGenstart, AlarmOptionForce, AlarmLyd, AlarmProgram, AlarmBesked) VALUES ('+Dato+','+Tidspunkt+','+Option1+','+Option2+','+Option3+','+Option4+','+Option5+','+Option6+','+Option7+','+Option8+','+AlarmLyd+','+AlarmProgram+','+AlarmBesked+')';

ADOCommand1.Execute;

Den kan sagtens køre programmet men når man når til det sted hvor denne kode køres kommer den med en syntaksfejl og siger noget med at der er en fejl i INSERT INTO- sætningen.
Avatar billede hestetoften Nybegynder
14. december 2004 - 12:26 #6
Du mangler et ')' til sidst og antal VALUES skal være lig antal felter

ADOCommand1.CommandText := 'INSERT INTO Alarm (Dato, Tidspunkt, AlarmOptionLyd, AlarmOptionProgram, AlarmOptionBesked, AlarmOptionLås, AlarmOptionLogOff, AlarmOptionLuk, AlarmOptionGenstart, AlarmOptionForce, AlarmLyd, AlarmProgram, AlarmBesked) VALUES ('+Dato+','+Tidspunkt+','+Option1+','+Option2+','+Option3+','+Option4+','+Option5+','+Option6+','+Option7+','+Option8+','+mangler(alarmlyd)+','+mangler(alarmprogram)+','+mangler(alarmbesked)+')';
Avatar billede hrc Mester
14. december 2004 - 12:48 #7
Grunden til at mine ParamByName ikke duede er rigtignok fordi du kører Access via ADO-komponenterne. Syntaksen er her:

ADOQuery.Parameters.ParamByName('').Value

hvor value er en variant der snupper alle typer. Hvordan man angiver en null-værdi sådan som man kan i BDE, ved jeg ikke.

Hestetoftens eksempel ser hermed sådan ud (for en ADOQuery):

ADOQuery.SQL.Text :=
  'INSERT INTO Alarm (Dato, Tidspunkt, AlarmOptionLyd, AlarmOptionProgram,'+
  '                  AlarmOptionBesked, AlarmOptionLås, AlarmOptionLogOff,'+
  '                  AlarmOptionLuk, AlarmOptionGenstart, AlarmOptionForce,'+
  '                  AlarmLyd, AlarmProgram, AlarmBesked)'+
  '  VALUES'+
  ' (:Dato,:Tidspunkt,:Option1,:Option2,:Option3,:Option4,:Option5,'+
  '  :Option6,:Option7,:Opton8,:AlarmLyd,:AlarmProgram,:Alarmbesked)';

ADOQuery.Parameters.ParamByName('Dato').Value := now;
ADOQuery.Parameters.ParamByName('Tidspunkt').Value := now;
ADOQuery.Parameters.ParamByName('Option1').Value := 'Jep, det er en option';
...

ADOQyery.ExecSQL();
Avatar billede roz Nybegynder
14. december 2004 - 16:46 #8
Får en fejl om at den ikke kan finde parameteret Dato. Hvis jeg fjerner linjen med
ADOQuery.Parameters.ParamByName('Dato').Value
så får jeg bar een fejl ved næste linje osv.
Avatar billede hestetoften Nybegynder
14. december 2004 - 23:00 #9
Du starter din linie således "('+Dato+','+..."

prøv med "(Dato+','+"

og slut med "+alarmbesked)';"

altså fjern "'+" i starten og fjern "+'" til sidst
Avatar billede roz Nybegynder
14. december 2004 - 23:10 #10
Husk det er den sidste nye kode jeg bruger ;) alts den fra hrc
Avatar billede roz Nybegynder
15. december 2004 - 18:56 #11
Så det du siger hestehoftenhjælper ikke meget i den kode.
Avatar billede roz Nybegynder
20. december 2004 - 15:23 #12
har fået det til at virke. Så tak til jer begge :)
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