Avatar billede mydream Nybegynder
08. december 2007 - 11:40 Der er 17 kommentarer og
1 løsning

Sql opretter for mange linjer

Jeg har flere gange oplevet, at der bliver oprettet 2 linjer i en given tabel, når jeg kun beder den om at indsætte een, og ligeledes har jeg en kedelig oplevelse med at den næsten hver gang opdaterer 2 gange når jeg kun beder den om en.

Der er ikke noget hokuspokus med mine sql sætninger, så kan det være noget opsætning der er forkert.

Har andre haft samme problemer og fået dem løst?
Avatar billede terry Ekspert
08. december 2007 - 11:49 #1
More likely an error in your code. Do you have any triggers on the tables?
Avatar billede mydream Nybegynder
08. december 2007 - 11:55 #2
what do you mean with triggers?

my code is simple:

sql ="insert into Links (LKat, LURL, LTitel, LBeskrivelse, LEmail, LModsatURL) values ('" & LKat &"','" & LURL &"','" & LTitel &"','" & LBeskrivelse &"','" & LEmail &"','" & LModsatURL &"')"
DB.Execute(sql)
Avatar billede keysersoze Guru
08. december 2007 - 12:03 #3
en trigger er en funktion du kan sætte op til at blive udført fx idet der indsættes eller opdateres i en tabel.

Den SQL du har dér vil kun indsætte 1 post i databasen - så det mest sandsynlige er at din kode udføres to gange. Hvis du kan køre SQL Server Profiler kan du se hvad præcist der bliver sendt til databasen.
Avatar billede terry Ekspert
08. december 2007 - 12:04 #4
http://www.devarticles.com/c/a/SQL-Server/Using-Triggers-In-MS-SQL-Server/1/


But if you dont know what they are then I doubt you are using them
Avatar billede terry Ekspert
08. december 2007 - 12:06 #5
You say your code is simple, but thats only the bit which inserts the data. If this is called more than once then you will get too many records.

What programming language do you use?
Avatar billede mydream Nybegynder
08. december 2007 - 12:10 #6
Hi Terry.

I am only calling it once. I use asp.

Keysersoze, jeg tvivler på at jeg har adgang til den, da databasen ligger på et webhotel.
Avatar billede terry Ekspert
08. december 2007 - 12:16 #7
Is it possible to make another table with only one field and at the same time you insert a record into Links insert a record or maybe update a counter to see if that same happens here.

For example:

UPDATE tblCounter set counter = counter +1
Avatar billede terry Ekspert
08. december 2007 - 12:17 #8
If you use the update then you obvioulsy need a record wher ether counter = 0 to start with.
Avatar billede mydream Nybegynder
08. december 2007 - 12:29 #9
The problem is not every time, only every second or third time.
Avatar billede mydream Nybegynder
08. december 2007 - 12:38 #11
Min formularknap ser sådan ud:

  <input name="Submit" type="image" onClick="MM_validateForm('URL','','R','Titel','','R','Email','','RisEmail','DinUrl','','R','Beskrivelse','','R');return document.MM_returnValue" value="Send" src="../design5/billeder/foreslaalink.gif" width="90" height="21">

Kan det som i spørgsmålet betyde, at formularen bliver sendt dobbelt?


Validateform:

<script language="JavaScript" type="text/JavaScript">
<!--
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_validateForm() { //v4.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
    if (val) { nm=val.name; if ((val=val.value)!="") {
      if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
        if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
      } else if (test!='R') { num = parseFloat(val);
        if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
        if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
          min=test.substring(8,p); max=test.substring(p+1);
          if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
    } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }
  } if (errors) alert('The following error(s) occurred:\n'+errors);
  document.MM_returnValue = (errors == '');
}
//-->
</script>
Avatar billede terry Ekspert
08. december 2007 - 12:45 #12
I dont know enough aboyt ASP but a sthe ling suggest it is VERY LIKELY the form which is being send twice.
Avatar billede keysersoze Guru
08. december 2007 - 13:01 #13
hvis webhotellet tillader connections udefra vil du sagtens kunne bruge profileren. Men udover det, så er det mest sandsynlige - ligesom terry skriver - at formen bliver submitted to gange, så hvis du fx disabler din knap lige efter valideringen er gået godt vil man ikke kunne komme til at klikke to gange.
Avatar billede mydream Nybegynder
08. december 2007 - 13:03 #14
Jeg har lige checket formularen, og hvis jeg fjerner formknappen og blot lavet et billede, der bliver klikket på for at kalde validateform, så validerer den kun og sender mig ikke viderer. så det må jo betyde at validateform ikke selv submitter men kun sender en besked tilbage til min formularknap.
Avatar billede mydream Nybegynder
08. december 2007 - 13:04 #15
Den url Terri henviste til linker videre til denne her: http://support.microsoft.com/default.aspx?scid=kb;en-us;264189 hvor de snakker om at det er insert execute der skaber et problem, og at man kan prøve at erstatte med insert select.

Hvad siger I til den teori?
Avatar billede terry Ekspert
08. december 2007 - 13:18 #16
I cant comment at all about ASP. The link http://support.microsoft.com/default.aspx?scid=kb;en-us;264189 actually is in SQL Server 6.5 so hopefully its not still actual in 2000/2005 but you never know with Microsoft :o)
Avatar billede keysersoze Guru
08. december 2007 - 17:42 #17
problemet vil være det samme uanset hvilken type knap du benytter
Avatar billede mydream Nybegynder
26. oktober 2012 - 12:01 #18
Lukker
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
Computerworld tilbyder specialiserede kurser i database-management

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