Avatar billede soeborg Nybegynder
28. oktober 2002 - 12:23 Der er 35 kommentarer og
2 løsninger

Updatere i access database

Hejsa

Så er den gal igen, denne gang drejer det sig om hvordan man gemmer(updatere) en ven i databasen, jeg har opret vennen og jeg kan finde venne, men hvordan updatere jeg eks. hans adresse? Sig hvis i vil have kode...

/Soeborg
Avatar billede arne_v Ekspert
28. oktober 2002 - 12:29 #1
JDBC.

Jeg formoder at laver en SELECT * FROM VEN for
at hente oplysningerne.

Du kan så updatere med UPDATE VEN SET ADDRESS='xxxx' WHERE NAME='yyyy'.

Husk at bruge executeUpdate i.s.f. executeQuery.
Avatar billede disky Nybegynder
28. oktober 2002 - 12:29 #2
update TABEL set kolonne="Vens nye navn" where ID=117

f.eks.
Avatar billede soeborg Nybegynder
28. oktober 2002 - 12:57 #3
Henter således

Database db = new Database();
db.open();

ResultSet res = db.doQuery("SELECT Navn, Adresse, Icqnr FROM Venner");

Vector rows = new Vector();
try
{
while(res.next())
{
Vector newRow = new Vector();
newRow.addElement(new String(res.getString(1)));    // Navn
newRow.addElement(new String(res.getString(2)));    // Adresse
newRow.addElement(new Integer(res.getInt(3)));      // Icqnr
rows.addElement(newRow);
}
}
catch(SQLException e){}

Vector top = new Vector();
top.addElement(new String("Navn"));
top.addElement(new String("Adresse"));
top.addElement(new String("Icq"));

db.close();
Avatar billede soeborg Nybegynder
28. oktober 2002 - 13:00 #4
Min tabel...

public gui(Vector rows, Vector top)
{
try
{UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());}
catch (Exception e){}

frame = new JFrame("Kundeliste");
pane = new JPanel();
pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));

tabel = new JTable(rows, top);
setColWidth(0,150);    // Navn
setColWidth(1,175);    // Adresse
setColWidth(2,50);    // Icq

scrollPane = new JScrollPane(tabel);
tabel.setPreferredScrollableViewportSize(new Dimension(800, 200));
pane.add(scrollPane, BorderLayout.CENTER);

frame.getContentPane().add(pane);

pane.add(jButton1);

jButton1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
jButton1_actionPerformed(e);
}
});
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
}
public void jButton1_actionPerformed(ActionEvent e)
{
            DET ER HER DER SKAL UPDATERES!!!
}
public void setColWidth(int col, int width)
{tabel.getColumnModel().getColumn(col).setPreferredWidth(width);}
}
Avatar billede soeborg Nybegynder
28. oktober 2002 - 13:03 #5
Man kan så dobbelt klikke i af rækkerne og ændre noget, eller alle... Hvordan gemmer man så de 3 ting, i den række eller gemmer man alle 3 ting i alle rækker???...
Avatar billede disky Nybegynder
28. oktober 2002 - 13:03 #6
Der sender du den update string jeg har postet tidligere til databasen, ret selvfølgelig så den passer med din tabel.

Brug db.doUpdate() på den.
Avatar billede disky Nybegynder
28. oktober 2002 - 13:04 #7
Via 'where XXX=YYY' sikre du at du kun opdaterer de rækker du ønsker.

Men en database er kold, glemmer du denne 'where' er HELE din tabel updateret.

Tro mig det kan skabe ballade.
Avatar billede soeborg Nybegynder
28. oktober 2002 - 13:13 #8
?? Enten gør jeg et eller andet forkert ellers fatter jeg og/eller computeren ikke noget... Jeg bruger:
update tabel set col="Navn" where ID=5
Avatar billede disky Nybegynder
28. oktober 2002 - 13:37 #9
hvad siger den af fejl ?
Avatar billede soeborg Nybegynder
28. oktober 2002 - 15:24 #10
den melder fejl i:
tabel og update..?
Avatar billede disky Nybegynder
28. oktober 2002 - 15:43 #11
Jeg skal bruge den text din exception giver dig.

try
{
}
catch(SQLException e)
{
e.printStackTrace();
}

Det printStackTrace udskriver skal jeg have.
Avatar billede soeborg Nybegynder
28. oktober 2002 - 16:30 #12
og den kan heller ikke finde db.Update()
Avatar billede disky Nybegynder
28. oktober 2002 - 17:17 #13
hvilke metoder forstår din Database klasse ?
Avatar billede soeborg Nybegynder
28. oktober 2002 - 19:24 #14
public void doUpdate
public ResultSet doQuery

Det er dem du mener ikke... Roder altid rundt i metoder og klasser og konstruktører ;-)
Avatar billede disky Nybegynder
28. oktober 2002 - 19:26 #15
yep netop dem. :-)

Du skal kalde 'db.doUpdate()' istedet for 'db.Update()'
Avatar billede soeborg Nybegynder
28. oktober 2002 - 19:43 #16
Fatter ikke en skid! Hader java og sql! ;)

Database db = new Database();
db.open();
int res=db.doUpdate("?? * ?? Kunde");
try
{
update Kunde set Navn="???" where Navn="???";
}
catch(SQLException a)
{
a.printStackTrace(System.out);
}
db.close();

Vel??
Avatar billede soeborg Nybegynder
28. oktober 2002 - 19:45 #17
ups... Databasen hedder Venner.... Damn!!!!
int res=db.doUpdate("?? * ?? Venner");
try
{
update Venner set Navn="???" where Navn="???";
}

Men det ændre jo ikke så meget andet end to fejl!
Avatar billede disky Nybegynder
28. oktober 2002 - 20:08 #18
try
{
int res=db.doUpdate("update Venner set Navn=\"DET NYE NAVN\" where Navn=\"GAMMELT NAVN\"");
}
catch (SQLException e)
{
e.printStackTrace();
}
Avatar billede arne_v Ekspert
28. oktober 2002 - 20:20 #19
Hvofor bruger du ikke single-quotes i SQL'en - det
gør normal Java med SQL mere læsbart.
Avatar billede disky Nybegynder
28. oktober 2002 - 20:22 #20
Fordi det gør ingen forskel, og jeg skrev bare videre på det han havde postet.
Avatar billede soeborg Nybegynder
28. oktober 2002 - 21:34 #21
normalt bruger man da også single-quotes til integer(tal) og dobbelt-quotes til string(tekst) eller??? Har jeg igen misforstået noget?
Fejl:
exception java.sql.SQLException is never thrown in body of corresponding try statement
catch (SQLException a)
^
Avatar billede arne_v Ekspert
28. oktober 2002 - 21:43 #22
Du bruger ikke single-quotes til tal.

Single-quotes er standard SQL for string literals.

En del SQL varianter tillader double-quotes for string literals.
Avatar billede disky Nybegynder
28. oktober 2002 - 21:48 #23
Så fanger din doUpdate() selv SQLException for dig, så bare fjern try/catch
Avatar billede soeborg Nybegynder
28. oktober 2002 - 21:58 #24
jepper nu virker det sku! Næsten.. Nu kommer der kun fejl når jeg bruger knappen! En sql fejl!... Så det ;)
Avatar billede disky Nybegynder
28. oktober 2002 - 22:07 #25
og hvad er den SQL fejl ?
Avatar billede soeborg Nybegynder
28. oktober 2002 - 22:10 #26
java.sql.SQLException:
[Microsoft][ODBC Microsoft Access-driver] Der er for få parametre.
Der var ventet 2.
Avatar billede soeborg Nybegynder
28. oktober 2002 - 22:11 #27
men hvor får den navnet fra...? For den skal jo ikke gemme det jeg skrive i kode, men i app..
Avatar billede soeborg Nybegynder
28. oktober 2002 - 22:14 #28
Det virker hvis jeg skriver så ledes... MEN den gemmer jo så bare ikke noget!

int res=db.doUpdate("update Venner set Navn=\"navn\" where Navn=\"navn\"");
Avatar billede disky Nybegynder
28. oktober 2002 - 22:24 #29
for at arne er glad retter vi lige til:
int res=db.doUpdate("update Venner set Navn='navn' where Navn='navn'");

Den først 'navn' skal du rette til det nye navn du ønsker der skal stå i databasen, og det andet 'navn' skal være det navn du ønsker at ændre.

p.s. Brug hellere en unik ide, hvis du har en, ellers risikerer du at ændre alle der hedder kurt til at hedde birthe istedet.
Avatar billede soeborg Nybegynder
28. oktober 2002 - 22:39 #30
hæhæ ja det ville vist ikke være så smart...
Jeg har jo hentet alle navne og lagt dem i en vector og udskriver dem i en række i en tabel. Kan jeg ikke hente dem derfra og smide dem tilbage til db'en?
Noget alla:
int res=db.doUpdate("update Venner set Navn='row1' where Navn='string1' + Adresse='row2' where Adresse='string2'");
?? Eller er jeg helt ude og skide med den ide?
Avatar billede disky Nybegynder
29. oktober 2002 - 07:08 #31
Din query er næsten korrekt:

int res=db.doUpdate("update Venner set Navn='row1', Adresse='row2' where Navn='string1' and Adresse='string2'");

Den skulle virke
Avatar billede soeborg Nybegynder
31. oktober 2002 - 11:29 #32
Hvordan fan*** får jeg den til at hente det man indtaster i tabelen for bagefter at gemme det i databasen fra den kolone???

Det andet virker fint nok, men det er jo meningen at man skal kunne ændre adressen i tabelen og derefter gemme den redigeret adresse...
Avatar billede disky Nybegynder
31. oktober 2002 - 12:39 #33
hvis det er en field, laver du en .getText() på det og gemmer den string i basen.
Avatar billede soeborg Nybegynder
31. oktober 2002 - 18:00 #34
det er det ikke.... Det er rows i en tabel som henter en String fra dben. Men den skal jo også kun gemme der hvor der er blevet ændret!

newRow.addElement(new String(res.getString(1)));// Navn
rows.addElement(newRow);
Avatar billede soeborg Nybegynder
31. oktober 2002 - 18:06 #35
hvad skal jeg bruge: Her lidt frit fra nonjava..
getRow(1)
getElement(1)
getVector()
getString(1)
?? Jeg har prøvet alt!!! Men næ nej..
Avatar billede disky Nybegynder
31. oktober 2002 - 20:44 #36
hvilken datatype er den tabel din data er i ?
Avatar billede soeborg Nybegynder
01. november 2002 - 11:03 #37
det er faktisk et godt spørgsmål, det er et af de spørgsmål jeg ikke forstår :-) Ømm... Kilde koden:
Database db = new Database();
db.open();

ResultSet res = db.doQuery("SELECT Navn, Adresse, Icqnr FROM Venner");

Vector rows = new Vector();
try
{
while(res.next())
{
Vector newRow = new Vector();
newRow.addElement(new String(res.getString(1)));    // Navn
newRow.addElement(new String(res.getString(2)));    // Adresse
newRow.addElement(new Integer(res.getInt(3)));      // Icqnr
rows.addElement(newRow);
}
}
catch(SQLException e){}

Vector top = new Vector();
top.addElement(new String("Navn"));
top.addElement(new String("Adresse"));
top.addElement(new String("Icq"));

db.close();

OG

private boolean DEBUG = true;
JFrame frame;
JPanel pane;
JTable Ventabel;
JScrollPane scrollPane;
JButton jButtonGem = new JButton("Gem");

public icqListe(Vector rows, Vector top)
{
try
{UIManager.setLookAndFeel
(UIManager.getSystemLookAndFeelClassName());}
catch (Exception e){}

frame = new JFrame("Icqliste");
pane = new JPanel();
pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));

Ventabel = new JTable(rows, top);
setColWidth(0,150);    // Navn
setColWidth(1,175);    // Adresse
setColWidth(2,50);    // Icqnr

scrollPane = new JScrollPane(Ventabel);
Ventabel.setPreferredScrollableViewportSize(new Dimension(800, 200));
pane.add(scrollPane, BorderLayout.CENTER);

frame.getContentPane().add(pane);

pane.add(jButtonGem);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.pack();
frame.setVisible(true);
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