請教一個各位一個問題問題,有如下資料庫結構
id list time link updatatime
1 足球 22:00 http://www. a.com/11/ 2015/07/13
2 籃球 23:15 http://www. b.cn/12/ 2015/07/13
3 排球 00:00 http://www.nba.com/14 2015/07/13
我從某網頁采集了節目(list)和比賽時間(time),后面是采集的鏈接,鏈接有可能會改變。如何寫MSSQL陳述句,判斷上面的資料是否一致,如果一致,則不更新,如果不一致,則更新link到相應的ID上,并更新updatatime(采集的時間)。反正我定期 采集,資料不存就入庫,資料存在就判斷是否有改變,這個代碼怎么寫啊?用的是delphi
uj5u.com熱心網友回復:
IF NOT EXISTS(
SELECT 1 FROM [...] WHERE [list] = '...' AND [updatetime] = '...'
)
INSERT INTO [...] (...) VALUES (...)
ELSE
UPDATE [...] SET [link] = '...', [updatetime] = '...' WHERE [list] = '...' AND [updatetime] = '...'
以上SQL在Delphi中回圈呼叫
uj5u.com熱心網友回復:
我從來沒試過這么長的SQL陳述句啊,只會簡單的例子,比如:
adoquery1.close
adoquery1.sql.clear;
adoquery1.sql.add(' SELECT 1 FROM [...] WHERE [list] = '...' AND [updatetime] = '...'');
adoquery1.open;
像你提供的SQL,我怎么換上去啊,呵呵,真心不會呢
uj5u.com熱心網友回復:
難道直接在sql.add();里面放入你的上面判斷代碼就可以了?
uj5u.com熱心網友回復:
procedure TForm1.Button4Click(Sender: TObject);
var sList,sTime,sLink,s1,s2,SQL:string;
begin
sList:=Edit1.text;
sTime:=Edit2.text;
sLink:=Edit3.text;
with DBGrid1.DataSource.DataSet do
begin
if (sList<>FieldByName('List').AsString) or
(sTime<>FieldByName('Time').AsString) or
(sLink<>FieldByName('Link').AsString) then
begin
IDKey:=FieldByName('IDKey').asString);
DateTimetoString(S2,'yyyy-MM-dd',now);
S1:=FieldByName('id').AsString;
SQL:='Update 表名 set ';
SQl:=SQL+'List='+#39+sList+#39+',';
SQl:=SQL+'Time='+#39+sTime+#39+',';
SQl:=SQL+'Link='+#39+sLink+#39+',';
SQl:=SQL+'undatatime='+#39+S2+#39+',';
SQl:=SQL+' where IDKey='+#39+IDKey+#39;
ADOQuery1.Active:=False;
ADOQuery1.SQL.Text:=SQL;
ADOQuery1.ExecSQL;
end;
end;
end;
IDKey是主鍵名,
1、首先Edit1,Edit2,Edit3是錄入新的資料
2、通過DBGrid顯示資料,滑鼠點擊選中的資料行,
3、點擊按鈕,更新資料。
uj5u.com熱心網友回復:
SQL:='Update 表名 set ';
SQl:=SQL+'List='+#39+sList+#39+',';
SQl:=SQL+'Time='+#39+sTime+#39+',';
SQl:=SQL+'Link='+#39+sLink+#39+',';
SQl:=SQL+'undatatime='+#39+S2+#39;
SQl:=SQL+' where IDKey='+#39+IDKey+#39;
上面一句代碼有誤,更正。
uj5u.com熱心網友回復:
var
szSql: String;
qryADO: TADOQuery;
begin
qryADO := TADOQuery.Create(nil);
try
qryADO.Connection := ...;
//開始回圈處理每一條資料
for I := 0 to x do
begin
szSql := 'IF NOT EXISTS('
+ 'SELECT 1 FROM [...] WHERE [list] = ''...'' AND [updatetime] = ''...'''
+ ') '
+ 'INSERT INTO [...] (...) VALUES (...) '
+ 'ELSE '
+ 'UPDATE [...] SET [link] = ''...'', [updatetime] = ''...'' WHERE [list] = ''...'' AND [updatetime] = ''...''';
qryADO.SQL.Text := szSql;
qryADO.Execute();
end;
finally
FreeAndNil(qryADO);
end;
end;
uj5u.com熱心網友回復:
對于這類sql陳述句,可以考慮在資料中使用存盤程序來處理。
uj5u.com熱心網友回復:
對于這類sql陳述句,可以考慮在資料中使用存盤程序來處理。
來個實體可以么?沒用過呢
uj5u.com熱心網友回復:
IF NOT EXISTS(
SELECT 1 FROM [...] WHERE [list] = '...' AND [updatetime] = '...'
)
INSERT INTO [...] (...) VALUES (...)
ELSE
UPDATE [...] SET [link] = '...', [updatetime] = '...' WHERE [list] = '...' AND [updatetime] = '...'
以上SQL在Delphi中回圈呼叫
我從來沒試過這么長的SQL陳述句啊,只會簡單的例子,比如:
adoquery1.close
adoquery1.sql.clear;
adoquery1.sql.add(' SELECT 1 FROM [...] WHERE [list] = '...' AND [updatetime] = '...'');
adoquery1.open;
像你提供的SQL,我怎么換上去啊,呵呵,真心不會呢
var
szSql: String;
qryADO: TADOQuery;
begin
qryADO := TADOQuery.Create(nil);
try
qryADO.Connection := ...;
//開始回圈處理每一條資料
for I := 0 to x do
begin
szSql := 'IF NOT EXISTS('
+ 'SELECT 1 FROM [...] WHERE [list] = ''...'' AND [updatetime] = ''...'''
+ ') '
+ 'INSERT INTO [...] (...) VALUES (...) '
+ 'ELSE '
+ 'UPDATE [...] SET [link] = ''...'', [updatetime] = ''...'' WHERE [list] = ''...'' AND [updatetime] = ''...''';
qryADO.SQL.Text := szSql;
qryADO.Execute();
end;
finally
FreeAndNil(qryADO);
end;
end;
眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......
值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......