Avatar billede fhansen Praktikant
09. november 2006 - 18:37 Der er 9 kommentarer

Problem med TupdateSql.

Hejsa.

Jeg har lige opdaget et problem med UpdateSql.

Jeg har en database  med en kunde tabel, i tabellen er der et et nummer felt, som bliver brugt til id_nummer, dette felt er et autoinc felt, således at enhver ny kunde bliver tildelt et fortløbende id_nummer.

Problemmet er nu at hvis man editere en post via updatesql, bliver posten tildelt et nyt id_nummer, det virker som om at updatesql sletter den gamle post  og opretter en ny post med tilrettet data.


Hmmm....var det forståligt ??


Hilsen


Finn
Avatar billede fhansen Praktikant
10. november 2006 - 00:26 #1
Damn slet ingen der har forslag, eller har jeg skrevet det uforståligt ??

Finn
Avatar billede hrc Mester
10. november 2006 - 10:02 #2
Det virker ret underligt. Har jeg ret i at UpdateSql er en rutine du selv har skrevet? Så kunne det være godt at se koden.

Jeg bruger selv en stored procedure som håndterer det på følgende måde: Hvis den primære nøgle er 0 så indsætter den recorden og returnerer det nye ID, ellers opdaterer den. Må antage at det er noget lignende du har gang i.

I MS-SQL skal du bruge "identity" til at sikre at der tildeles nye ID'er:

..
(
  ID  int identity(1,1) not null,
  ..,
  primary key (ID)
)
Avatar billede fhansen Praktikant
12. november 2006 - 22:58 #3
Nej TUpdateSql er en BDE component
Avatar billede hrc Mester
13. november 2006 - 09:28 #4
Nååe den - nu har jeg læst hjælpen om den. Det ser da smart ud. Hvordan ser dine insert og update scripts ud? Er der noget der kan få din tabel til at opføre sig sådan? Hvordan ser din tabeldefinition egentlig ud? Du kan jo sagtens have et unikt id som ikke er defineret som primærnøgle.

P.S. Du er på vej væk fra en Paradox-platform til en MS-SQL, ikke?
Avatar billede fhansen Praktikant
14. november 2006 - 21:32 #5
Ganske rigtigt, det skulle gerne ende med en MS SQL eller MySql, men jeg vil gerne have alle ændringer til at køre før end jeg skriver om til SQL.

Min modifySql ser sådan ud..:

update Kunder.db
set
  Navn = :Navnet
where
  Navn = :OLD_Navn  and
  Adresse = :OLD_Adresse


Min tabel består af

Nummer  AutoInc
Navn    Char
Adresse  Char
.....

Primær nøgle er Nummer og Navn

Mit kald ser sådan ud

UpDateSql1.Query[ukModify].Params[0].Value := Edit1.Text;
    UpDateSql1.Apply(UkModify);
    Query1.ApplyUpdates;
Avatar billede fhansen Praktikant
14. november 2006 - 21:52 #6
Har nu ændret tabellen, således at kun nummer er primær nøgle, og så virker det så sandelig.

Jeg har et lille værktøj fra MyDac der kan omskrive alle mine BDE komponenter til MySQL.  Kender du noget til program, jeg har selv lidt tvivl til et program der kan omskrive kode.
Avatar billede hrc Mester
15. november 2006 - 00:33 #7
Næ. Det program er nyt for mig. Det er nu ikke så svært at portere fra paradox til MySql eller MS-SQL, bare det er fra Paradox'sk SQL til en af de andre varianter. På med en TADOQuery og kopiér scriptene over, hvorefter TQuery kan slettes. Skal du være sikker på at det virker, så må du læse SQL-92 standarden og ikke gå ud over det (men så mister du vist autoincrementerende felter - og det er skidt).

I øvrigt så er der vist kun prisen der taler for at du vælger MySql. MS-SQL har overrasket mig meget positivt på det seneste.

Prøv i øvrigt at hente GExperts hjem. Det er en slags add-on til Delphi og der er bl.a. en "erstat kompoent med en anden komponent"-funktion. Det er en af de bedste gratis udvidelser til Delphi - kan klart anbefales.
Avatar billede fhansen Praktikant
17. november 2006 - 23:08 #8
Det vil jeg prøve at hente

Takker...
Avatar billede fhansen Praktikant
27. februar 2011 - 23:42 #9
hrc ligger du ikke lige et svar
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